diff --git a/Advanced Operating Systems.md b/Advanced Operating Systems.md index 6330c6e..14c1bb7 100644 --- a/Advanced Operating Systems.md +++ b/Advanced Operating Systems.md @@ -47,7 +47,7 @@ Gegenstand dieser Vorlesung: Konstruktionsrichtlinien für solche ,,High-End Bet - Quality ofservice(QoS) requirements - u.a. - ,,~ilities'' - - im Englischen: nichtfunktionale Eigenschaften eines Systems etc. informell auch als seine „ilities“ bezeichnet, hergeleitet von Begriffen wie + - im Englischen: nichtfunktionale Eigenschaften eines Systems etc. informell auch als seine ,,ilities'' bezeichnet, hergeleitet von Begriffen wie - Stability - Portability - ... @@ -185,7 +185,7 @@ Mobile und eingebettete Systeme (eine kleine Auswahl) - Automobile - Steuerung von Motor-und Bremssystemen - Fahrsicherheit - - Insasseninformation (und –unterhaltung) + - Insasseninformation (und -unterhaltung) - (teil-) autonomes Fahren - verteilte Sensornetze (WSN) - Chipkarten @@ -195,15 +195,15 @@ Mobile und eingebettete Systeme (eine kleine Auswahl) - Digitalkameras Beispiel: Weltraumerkundung -- Cassini-Huygens (1997–2017) +- Cassini-Huygens (1997-2017) - Radionuklidbatterien statt Solarzellen - Massenspeicher: SSDs statt Magnetbänder -- Rosetta (2004–2016) +- Rosetta (2004-2016) - 31 Monate im Energiesparmodus -- Opportunity (2003–2019) +- Opportunity (2003-2019) - geplante Missionsdauer: 90 d - Missionsdauer insgesamt: >> 5000 d -- Hayabusa (2003–2010) +- Hayabusa (2003-2010) - Beschädigung der Energieversorgung - Energiesparmodus: um 3 Jahre verzögerte Rückkehr - Voyager 1 (1977 bis heute) @@ -242,7 +242,7 @@ Energiezustände beim Betrieb von Festplatten: - Schlussfolgerung: durch geringe Verlängerungen des idle - Intervalls kann signifikant der Energieverbrauch reduziert werden. #### Prefetching-Mechanismus -- Prefetching („Speichervorgriff“, vorausschauendes Lesen) & Caching +- Prefetching (,,Speichervorgriff'', vorausschauendes Lesen) & Caching - Standard-Praxis bei moderner Datei-E/A - Voraussetzung: Vorwissen über benötigte Folge von zukünftigen Datenblockreferenzen (z.B. Blockadressen für bestimmte Dateien, gewonnen durch Aufzeichnung früherer Zugriffsmuster beim Start von Anwendungen -Linux: readahead syscall) - Ziel: Performanzverbesserungdurch Durchsatzerhöhung u. Latenzzeit-Verringerung @@ -270,7 +270,7 @@ Energiezustände beim Betrieb von Festplatten: - Regeln für diese Strategie: 1. Optimales Prefetching: Jedes _prefetch_ sollte den nächsten Block im Referenzstrom in den Cache bringen, der noch nicht dort ist. 2. Optimales Ersetzen: Bei jedem ersetzenden _prefetch_ sollte der Block überschrieben werden, der am spätesten in der Zukunft wieder benötigt wird. - 3. „Richte keinen Schaden an“: Überschreibe niemals Block A um Block B zu holen, wenn A vor B benötigt wird. + 3. ,,Richte keinen Schaden an'': Überschreibe niemals Block A um Block B zu holen, wenn A vor B benötigt wird. 4. Erste Möglichkeit: Führe nie ein ersetzendes _prefetch_ aus, wenn dieses schon vorher hätte ausgeführt werden können. - Energieeffizientes Prefetching - Optimale Ersetzungsstrategie und 3 unterschiedliche Prefetching-Strategien: @@ -286,7 +286,7 @@ Energiezustände beim Betrieb von Festplatten: - Auswertung: Regeln für energieeffiziente Prefetching-Strategie nach Papathanasiou elal.: [PaSc04] 1. Optimales Prefetching: Jedes _prefetch_ sollte den nächsten Block im Referenzstrom in den Cache bringen, der noch nicht dort ist. 2. Optimales Ersetzen: Bei jedem ersetzenden _prefetch_ sollte der Block überschrieben werden, der am spätesten in der Zukunft wieder benötigt wird. - 3. „Richte keinen Schaden an“: Überschreibe niemals Block A um Block B zu holen, wenn A vor B benötigt wird. + 3. ,,Richte keinen Schaden an'': Überschreibe niemals Block A um Block B zu holen, wenn A vor B benötigt wird. 4. Maximiere Zugriffsfolgen: Führe immer dann nach einem _fetch_ oder _prefetch_ ein weiteres _prefetch_ aus, wenn Blöcke für eine Ersetzung geeignet sind. (i.S.v. Regel 3) 5. Beachte Idle-Zeiten: Unterbrich nur dann eine Inaktivitätsperiode durch ein _prefetch_ , falls dieses sofort ausgeführt werden muss, um einen Cache-Miss zu vermeiden. @@ -333,7 +333,7 @@ Verlustleistung: $P_{leakage}$ - Typ einer Anwendung - entscheidet über jeweilige Nutzererwartung 1. Hintergrundanwendung (z.B. Compiler); von Interesse: Gesamt-Bearbeitungsdauer, Durchsatz - 2. Echtzeitanwendung(z.B. Video-Player, MP3-Player); von Interesse: „flüssiges“ Abspielen von Video oder Musik + 2. Echtzeitanwendung(z.B. Video-Player, MP3-Player); von Interesse: ,,flüssiges'' Abspielen von Video oder Musik 3. Interaktive Anwendung (z.B. Webbrowser); von Interesse: Reaktivität, d.h. keine (wahrnehmbare) Verzögerung zwischen Nutzer-Aktion und Rechner-Reaktion - Insbesondere kritisch: Echtzeitanwendungen, interaktive Anwendungen @@ -413,7 +413,7 @@ Energiebewusstes RR: Reaktivität und Fairness - Beispiel: Synergie nichtfunktionaler Eigenschaften - Performanz nur möglich durch Parallelität $\rightarrow$ Multicore-Hardware - Multicore-Hardware nur möglich mit Lastausgleich und Lastverteilungauf mehrere CPUs - - dies erfordert ebenfalls Verteilungsstrategien: „Energy-aware Scheduling“ (Linux-Strategie zur Prozessorallokation -nicht zeitlichem Multiplexing!) + - dies erfordert ebenfalls Verteilungsstrategien: ,,Energy-aware Scheduling'' (Linux-Strategie zur Prozessorallokation -nicht zeitlichem Multiplexing!) ### Systemglobale Energieeinsparungsmaßnahmen - Traditionelle Betriebssysteme: Entwurf so, dass zu jedem Zeitpunkt Spitzen-Performanzangestrebt @@ -434,8 +434,8 @@ Energiebewusstes RR: Reaktivität und Fairness - Steuerung/Strategien: Softwareunterstützungnotwendig! Dynamisches Energiemanagement (DPM)- Strategien (Klassen) bestimmt, wann und wie lange eine Hardware-Komponente sich in Energiesparmodusbefinden sollte -- Greedy: Hardware-Komponente sofort nach Erreichen des Leerlaufs in Energiesparmodus, „Aufwecken“ durch neue Anforderung -- Time-out: Energiesparmodus erst nachdem ein definiertes Intervall im Leerlauf, „Aufwecken“ wie bei Greedy-Strategien +- Greedy: Hardware-Komponente sofort nach Erreichen des Leerlaufs in Energiesparmodus, ,,Aufwecken'' durch neue Anforderung +- Time-out: Energiesparmodus erst nachdem ein definiertes Intervall im Leerlauf, ,,Aufwecken'' wie bei Greedy-Strategien - Vorhersage: Energiesparmodus sofort nach Erreichen des Leerlaufs, wenn Heuristik vorhersagt,dass Kosten gerechtfertigt - Stochastisch: Energiesparmodus auf Grundlage eines stochastischen Modells @@ -496,7 +496,7 @@ weitere Einflussfaktoren: Speicherverwaltungskosten - dynamische Speicherreservierung durch Tasks ##### Beispiel 1: sparsam -Prozesskontrollblock (PCB, Metadatenstruktur des Prozessdeskriptors) eines kleinen Echtzeit-Kernels („DICK“): +Prozesskontrollblock (PCB, Metadatenstruktur des Prozessdeskriptors) eines kleinen Echtzeit-Kernels (,,DICK''): ```cpp // Process Control Block (PCB) struct pcb { @@ -631,8 +631,691 @@ Einflussfaktoren des Betriebssystems: - Modularisierung (zur Kompilierzeit) des Kernels: gezielte Anpassung an Einsatzdomäne möglich - Adaptivität (zur Kompilier-und Laufzeit) des Kernels: gezielte Anpassung an sich ändernde Umgebungsbedingungen möglich ($\rightarrow$ Cassini-Huygens-Mission) +## Architekturentscheidungen +- bisher betrachtete Mechanismen: allgemein für alle BS gültig +- ... typische Einsatzgebiete sparsamer BS: eingebettete Systeme +- eingebettetes System: (nach [Manl94] ) + - Computersystem, das in ein größeres technisches System, welches nicht zur Datenverarbeitung dient,physisch eingebunden ist. + - Wesentlicher Bestandteil dieses größeren Systems hinsichtlich seiner Entwicklung, technischer Ausstattung sowie seines Betriebs. + - Liefert Ausgaben in Form von (menschenlesbaren)Informationen, (maschinenlesbaren)Daten zur Weiterverarbeitung und Steuersignalen. +- BS für eingebettete Systeme: spezielle, anwendungsspezifische Ausprägung der Aufgaben eines ,,klassischen'' Universal-BS + - reduzierter Umfang von HW-Abstraktion, generell: hardwarenähere Ablaufumgebung + - begrenzte (extrem: gar keine) Notwendigkeit von HW-Multiplexing & -Schutz +- daher eng verwandte NFE: Adaptivitätvon sparsamen BS +- sparsame Betriebssysteme: + - energieeffizient ~ geringe Architekturanforderungen an energieintensive Hardware (besonders CPU, MMU, Netzwerk) + - speichereffizient ~ Auskommen mit kleinen Datenstrukturen (memory footprint) +- Konsequenz: geringe logische Komplexität des Betriebssystemkerns +- sekundär: Adaptivität des Betriebssystemkerns + +### Makrokernel (monolithischer Kernel) +![](Assets/AdvancedOperatingSystems-makrokernel.png) +- User Space: + - Anwendungstasks + - CPU im unprivilegiertenModus (Unix ,,Ringe'' 1...3) + - Isolation von Tasks durch Programmiermodell(z.B. Namespaces) oder VMM(private vAR) +- Kernel Space: + - Kernelund Gerätecontroller (Treiber) + - CPU im privilegierten Modus (Unix ,,Ring'' 0) + - keine Isolation (VMM: Kernel wird in alle vAR eingeblendet) + +### Mikrokernel +![](Assets/AdvancedOperatingSystems-mikrokernel.png) +- User Space: + - Anwendungstasks, Kernel-und Treiber tasks ( Serverprozesse, grau) + - CPU im unprivilegiertenModus + - Isolation von Tasks durch VMM +- Kernel Space: + - funktional minimaler Kernel(μKernel) + - CPU im privilegierten Modus + - keine Isolation (Kernel wird in alle vAR eingeblendet) + +### Architekturkonzepte im Vergleich +- Makrokernel: + - ✓ vglw. geringe Kosten von Kernelcode (Energie, Speicher) + - ✓ VMM nicht zwingend erforderlich + - ✓ Multitasking ($\rightarrow$ Prozessmanagement!)nicht zwingend erforderlich + - ✗ Kernel (inkl. Treibern) jederzeit im Speicher + - ✗ Robustheit, Sicherheit, Adaptivität +- Mikrokernel: + - ✓ Robustheit, Sicherheit, Adaptivität + - ✓ Kernelspeicherbedarf gering, Serverprozesse nur wenn benötigt ($\rightarrow$ Adaptivität) + - ✗ hohe IPC-Kosten von Serverprozessen + - ✗ Kontextwechselkosten von Serverprozessen + - ✗ VMM, Multitasking i.d.R. erforderlich + +## Beispiel-Betriebssysteme +### TinyOS +- Beispiel für sparsame BS im Bereich eingebetteter Systeme +- verbreitete Anwendung: verteilte Sensornetze (WSN) +- ,,TinyOS'' ist ein quelloffenes, BSD-lizenziertes Betriebssystem +- das für drahtlose Geräte mit geringem Stromverbrauch, wie sie in + - Sensornetzwerke, ($\rightarrow$ Smart Dust) + - Allgegenwärtiges Computing, + - Personal Area Networks, + - intelligente Gebäude, + - und intelligente Zähler. +- Architektur: + - grundsätzlich: monolithisch (Makrokernel) mit Besonderheiten: + - keine klare Trennung zwischen der Implementierung von Anwendungen und BS (wohl aber von deren funktionalen Aufgaben!) + - $\rightarrow$ zur Laufzeit: 1 Anwendung + Kernel +- Mechanismen: + - kein Multithreading, keine echte Parallelität + - $\rightarrow$ keine Synchronisation zwischen Tasks + - $\rightarrow$ keine Kontextwechsel bei Taskwechsel + - Multitasking realisiert durch Programmiermodell + - nicht-präemptives FIFO-Scheduling + - kein Paging$\rightarrow$ keine Seitentabellen, keine MMU +- in Zahlen: + - Kernelgröße: 400 Byte + - Kernelimagegröße: 1 - 4 kByte + - Anwendungsgröße: typisch ca. 15 kB, Datenbankanwendung: 64 kB +- Programmiermodell: + - BS und Anwendung werden als Ganzes übersetzt: statische Optimierungen durch Compilermöglich (Laufzeit, Speicherbedarf) + - Nebenläufigkeit durch ereignisbasierte Kommunikation zw. Anwendung und Kernel + - $\rightarrow$ command: API-Aufruf, z.B. EA-Operation (vglb. Systemaufruf) + - $\rightarrow$ event: Reaktion auf diesen durch Anwendung + - sowohl commands als auch events : asynchron +- Beispieldeklaration: + ```cpp + interface Timer { + command result_t start(char type, uint32_t interval); + command result_t stop(); + event result_t fired(); + } + interface SendMsg { + command result_t send(uint16_t address, uint8_t length, TOS_MsgPtr msg); + event result_t sendDone(TOS_MsgPtr msg, result_t success); + } + ``` + +### RIOT +[RIOT-Homepage: http://www.riot-os.org] +- ebenfalls sparsames BS,optimiert für anspruchsvollere Anwendungen (breiteres Spektrum) +- ,,RIOT ist ein Open-Source-Mikrokernel-basiertes Betriebssystem, das speziell für die Anforderungen von Internet-of-Things-Geräten (IoT) und anderen eingebetteten Geräten entwickelt wurde.'' + - Smartdevices, + - intelligentes Zuhause, intelligente Zähler, + - eingebettete Unterhaltungssysteme + - persönliche Gesundheitsgeräte, + - intelligentes Fahren, + - Geräte zur Verfolgung und Überwachung der Logistik. +- Architektur: + - halbwegs: Mikrokernel + - energiesparendeKernelfunktionalität: + - minimale Algorithmenkomplexität + - vereinfachtes Threadkonzept $\rightarrow$ keine Kontextsicherung erforderlich + - keine dynamische Speicherallokation + - energiesparende Hardwarezustände vom Scheduler ausgelöst (inaktive CPU) + - Mikrokerneldesign unterstützt komplementäre NFE: Adaptivität, Erweiterbarkeit + - Kosten: IPC (hier gering!) +- Mechanismen: + - Multithreading-Programmiermodell + - modulare Implementierung von Dateisystemen, Scheduler, Netzwerkstack +- in Zahlen: + - Kernelgröße: 1,5 kByte + - Kernelimagegröße: 5 kByte + +Implementierung +- ... kann sich jeder mal ansehen (keine spezielle Hardware, beliebige Linux-Distribution, FreeBSD, macOSX mit git ): + ```bash + $ git clone git://github.com/RIOT-OS/RIOT.git + $ cd RIOT + $ cd examples/default/ + $ make all + $ make term + ``` +- startet interaktive Instanz von RIOT als ein Prozess des Host-BS +- Verzeichnis RIOT: Quellenzur Kompilierung des Kernels, mitgelieferte Bibliotheken, Gerätetreiber, Beispielanwendungen; z.B.: + - RIOT/core/include/thread.h: Threadmodell, Threaddeskriptor + - RIOT/core/include/sched.h, + - RIOT/core/sched.c: Implementierung des (einfachen) Schedulers +- weitere Infos: riot-os.org/api + # Robustheit und Verfügbarkeit +## Motivation +- allgemein: verlässlichkeitskritischeAnwendungsszenarien + - Forschung in garstiger Umwelt + - Weltraumerkundung + - hochsicherheitskritische Systeme: + - Rechenzentren von Finanzdienstleistern + - Rechenzentren von Cloud-Dienstleistern + - hochverfügbare System: + - all das bereits genannte + - öffentliche Infrastruktur(Strom, Fernwärme, ...) + - HPC (high performancecomputing) + +## Allgemeine Begriffe +- Verlässlichkeit, Zuverlässigkeit (dependability) + - übergeordnete Eigenschaft eines Systems [ALRL04] + - Fähigkeit, eine Leistungzu erbringen, der man berechtigterweise vertrauen kann +- Taxonomie: umfasst entsprechend Definition die Untereigenschaften + 1. Verfügbarkeit (availability) + 2. Robustheit (robustness, reliability + 3. (Funktions-) Sicherheit (safety) + 4. Vertraulichkeit (confidentiality) + 5. Integrität (integrity) + 6. Wartbarkeit (maintainability) (vgl.: evolutionäre Eigenschaften) +- 1., 4. & 5. auch Untereigenschaften von IT-Sicherheit (security) +- $\rightarrow$ nicht für alle Anwendungen sind alle Untereigenschaften erforderlich + +### Robustheitsbegriff +- Teil der primären Untereigenschaften von Verlässlichkeit: Robustheit (robustness, reliability) +- Ausfall: beobachtbare Verminderung der Leistung, die ein System tatsächlich erbringt, gegenüber seiner als korrekt spezifizierten Leistung +- Robustheit: Verlässlichkeit unter Anwesenheit externer Ausfälle (= Ausfälle, deren Ursache außerhalb des betrachteten Systems liegt) +- im Folgenden: kurze Systematik der Ausfälle ... + +### Fehler und Ausfälle ... +- Fehler $\rightarrow$ fehlerhafter Zustand $\rightarrow$ Ausfall + - grundlegende Definitionen dieser Begriffe (ausführlich: [ALRL04, AvLR04] ): + - Ausfall (failure): liegt vor, wenn tatsächliche Leistung(en), die ein System erbringt, von als korrekt spezifizierter Leistung abweichen + - fehlerhafter Zustand ( error ): notwendige Ursacheeines Ausfalls (nicht jeder error muss zu failure führen) + - Fehler ( fault ): Ursache für fehlerhaften Systemzustand ( error ), z.B. Programmierfehler + - ![](Assets/AdvancedOperatingSystems-fehler.png) + +### ... und ihre Vermeidung +- Umgang mit ... + - faults: + - Korrektheit testen + - Korrektheit beweisen($\rightarrow$ formale Verifikation) + - errors: + - Maskierung, Redundanz + - Isolationvon Subsystemen + - $\rightarrow$ Isolationsmechanismen + - failures: + - Ausfallverhalten (neben korrektem Verhalten) spezifizieren + - Ausfälle zur Laufzeit erkennen und Folgen beheben, abschwächen... + - $\rightarrow$ Micro-Reboots + +## Fehlerhafter Zustand +- interner und externer Zustand (internal & external state) + - externer Zustand (einer Systems oder Subsystems): der Teil des Gesamtzustands, der an externer Schnittstelle (also für das umgebende (Sub-) System) sichtbar wird + - interner Zustand: restlicher Teilzustand + - (tatsächlich) erbrachte Leistung: zeitliche Folge externer Zustände +- Beispiele für das System ( Betriebssystem-) Kernel : + - Subsysteme: Dateisystem, Scheduler, E/A, IPC, ..., Gerätetreiber + - fault : Programmierfehler im Gerätetreiber + - externer Zustand des Treibers (oder des Dateisystems, Schedulers, E/A, IPC, ...) ⊂ interner Zustand des Kernels + - ![](Assets/AdvancedOperatingSystems-treiber-kernel.png) + +### Fehlerausbreitung und (externer) Ausfall +- Wirkungskette: + -[X] Treiber-Programmierfehler (fault) + -[X] fehlerhafter interner Zustand des Treibers (error) + - Ausbreitung dieses Fehlers ( failure des Treibers) + - = fehlerhafter externer Zustand des Treibers + - = fehlerhafter interner Zustand des Kernels( error ) + - = Kernelausfall!( failure ) + - [X] Auswirkung: fehlerhafter interner Zustand eines weiteren Kernel-Subsystems (z.B. error des Dateisystems) +- $\rightarrow$ Robustheit: Isolationsmechanismen +- ![](Assets/AdvancedOperatingSystems-treiber-kernel-fehler.png) + +## Isolationsmechanismen +- im Folgenden: Isolationsmechanismen für robuste Betriebssysteme + - durch strukturierte Programmierung + - durch Adressraumisolation +- es gibt noch mehr: Isolationsmechanismen für sichere Betriebssysteme + - all die obigen... + - durch kryptografische Hardwareunterstützung: Enclaves + - durch streng typisierte Sprachen und managed code + - durch isolierte Laufzeitumgebungen: Virtualisierung + +### Strukturierte Programmierung +Monolithisches BS... in historischer Reinform: +- Anwendungen +- Kernel + - gesamte BS-Funktionalität + - programmiert als Sammlung von Prozeduren + - jede darf jede davon aufrufen + - keine Modularisierung + - keine definierten internen Schnittstellen + +#### Monolithisches Prinzip +- Ziel: Isolation zwischen Anwendungen und Betriebssystem +- Mechanismus: Prozessor-Privilegierungsebenen ( user space und kernel space ) +- Konsequenz für Strukturierung des Kernels: Es gibt keine Strukturierung des Kernels ... +- ... jedenfalls fast: Ablauf eines Systemaufrufs (Erinnerung) + - ![](Assets/AdvancedOperatingSystems-systemaufruf.png) + +#### Strukturierte Makrokernarchitektur +- Resultat: schwach strukturierter (monolithischer) Makrokernel +- ![](Assets/AdvancedOperatingSystems-makrokernelarchitektur.png) + - nach [TaWo05], S. 45 +- Weiterentwicklung: + - Schichtendifferenzierung ( layered operating system ) + - Modularisierung (Bsp.: Linux-Kernel) + | Kernelcode | + | ------------------------- | + | VFS | + | IPC, Dateisystem | + | Scheduler, VMM | + | Dispatcher, Gerätetreiber | +- Modularer Makrokernel: + - alle Kernelfunktionen in Moduleunterteilt (z.B. verschiedene Dateisystemtypen) $\rightarrow$ Erweiterbarkeit, Wartbarkeit, Portierbarkeit + - klar definierte Modulschnittstellen(z.B. virtualfilesystem, VFS ) + - Module zur Kernellaufzeit dynamisch einbindbar ($\rightarrow$ Adaptivität) + +#### Fehlerausbreitung beim Makrokernel +- strukturierte Programmierung: + - ✓ Wartbarkeit + - ✓ Portierbarkeit + - ✓ Erweiterbarkeit + - O (begrenzt) Adaptivität + - O (begrenzt) Schutz gegen statische Programmierfehler: nur durch Compiler (z.B. C private, public) + - ✗ kein Schutz gegen dynamische Fehler + - $\rightarrow$ Robustheit...? +- nächstes Ziel: Schutz gegen Laufzeitfehler... $\rightarrow$ Laufzeitmechanismen + +### Adressraumisolation +- zur Erinnerung: private virtuelle Adressräume zweier Tasks ($i\not= j$) + - ![](Assets/AdvancedOperatingSystems-private-virtuelle-adressräume.png) +- private virtuelle vs. physischer Adresse + - ![](Assets/AdvancedOperatingSystems-virtuelle-vs-physische-adresse.png) + +#### Private virtuelle Adressräume und Fehlerausbreitung +- korrekte private vAR ~ kollisionsfreie Seitenabbildung! +- Magie in Hardware: MMU (BS steuert und verwaltet...) +- Robustheit: Was haben wir von privaten vAR? + - ✓ nichtvertrauenswürdiger (i.S.v. potenziell nicht korrekter) Code kann keine beliebigen physischen Adressen schreiben (er erreicht sie ja nicht mal...) + - ✓ Kommunikation zwischen nvw. Code (z.B. Anwendungstasks) muss durch IPC-Mechanismen explizit hergestellt werden (u.U. auch shared memory) + - $\rightarrow$ Überwachung und Validierung zur Laufzeit möglich + - ✓ Kontrollfluss begrenzen: Funktionsaufrufe können i.A. (Ausnahme: RPC) keine AR-Grenzen überschreiten + - $\rightarrow$ BS-Zugriffssteuerungkann nicht durch Taskfehler ausgehebelt werden + - $\rightarrow$ unabsichtliche Terminierungsfehler(unendliche Rekursion) erschwert ... + +#### Was das für den Kernel bedeutet +- private virtuelle Adressräume + - gibt es schon so lange wie VMM + - gab es lange nur auf Anwendungsebene + - $\rightarrow$ keine Isolation zwischen Fehlern innerhalb des Kernels! + - ![](Assets/AdvancedOperatingSystems-virtuelle-kernel-adressräume.png) +- nächstes Ziel: Schutz gegen Kernelfehler (Gerätetreiber)... $\rightarrow$ BS-Architektur + +## Mikrokernelarchitektur +- Fortschritt ggü. Makrokernel: + - Strukturierungskonzept: + - strenger durchgesetzt durch konsequente Isolation voneinander unabhängiger Kernel-Subsysteme + - zur Laufzeit durchgesetzt $\rightarrow$ Reaktion auf fehlerhafte Zustände möglich! + - zusätzlich zu vertikaler Strukturierung des Kernels: horizontale Strukturierungeingeführt + - $\rightarrow$ funktionale Einheiten: vertikal (Schichten) + - $\rightarrow$ isolierteEinheiten: horizontal (private vAR) +- Idee: + - Kernel (alle BS-Funktionalität) $\rightarrow$ μKernel (minimale BS-Funktionalität) + - Rest (insbes. Treiber): ,,gewöhnliche'' Anwendungsprozesse mit Adressraumisolation + - Kommunikation: botschaftenbasierteIPC (auch client-server operating system ) + - Nomenklatur: Mikrokernelund Serverprozesse + +### Modularer Makrokernel vs. Mikrokernel +- ![Abb. nach [Heis19]](Assets/AdvancedOperatingSystems-modularer-makrokernel.png) +- minimale Kernelfunktionalität: + - keine Dienste, nur allgemeine Schnittstellenfür diese + - keine Strategien, nur grundlegende Mechanismenzur Ressourcenverwaltung +- neues Problem: minimales Mikrokerneldesign + - ,,Wir haben 100 Leute gefragt...'': Wie entscheide ich das? +- ![Abb. nach [Heis19]](Assets/AdvancedOperatingSystems-modularer-makrokernel-2.png) + - Ablauf eines Systemaufrufs + - schwarz: unprivilegierteInstruktionen + - blau:privilegierte Instruktionen + - rot:Übergang zwischen beidem (μKern $\rightarrow$ Kontextwechsel!) + +#### Robustheit von Mikrokernen +- = Gewinn durch Adressraumisolation innerhalb des Kernels + - ✓ kein nichtvertrauenswürdiger Code im kernelspace , der dort beliebige physische Adressen manipulieren kann + - ✓ Kommunikation zwischen nvw. Code (nicht zur zwischen Anwendungstasks)muss durch IPC explizit hergestellt werden $\rightarrow$ Überwachung und Validierung zur Laufzeit + - ✓ Kontrollfluss begrenzen: Zugriffssteuerung auch zwischen Serverprozessen, zur Laufzeit unabhängiges Teilmanagement von Code (Kernelcode) möglich (z.B.: Nichtterminierung erkennen) +- Neu: + - ✓ nvw. BS-Code muss nicht mehr im kernelspace (höchste Prozessorprivilegierung) laufen + - ✓ verbleibender Kernel (dessen Korrektheit wir annehmen): klein, funktional weniger komplex, leichter zu entwickeln, zu testen, evtl. formal zu verifizieren + - ✓ daneben: Adaptivitätdurch konsequentere Modularisierung des Kernels gesteigert + +### Mach +- Mikrokernel-Design: Erster Versuch + - Carnegie Mellon University (CMU), School of Computer Science 1985 - 1994 +- ein wenig Historie + - UNIX (Bell Labs) - K. Thompson, D. Ritchie + - BSD (U Berkeley) - W. Joy + - System V - W. Joy + - Mach (CMU) - R. Rashid + - MINIX - A. Tanenbaum + - NeXTSTEP (NeXT) - S. Jobs + - Linux - L. Torvalds + - GNU Hurd (FSF) - R. Stallman + - Mac OS X (Apple) - S. Jobs + +#### Mach: Ziele +Entstehung +- Grundlage: + - 1975: Aleph(BS des ,,Rochester Intelligent Gateway''), U Rochester + - 1979/81: Accent (verteiltes BS), CMU +- gefördert durch militärische Geldgeber: + - DARPA: Defense AdvancedResearch Projects Agency + - SCI: Strategic Computing Initiative + +Ziele +- Mach 3.0 (Richard Rashid, 1989): einer der ersten praktisch nutzbaren μKerne +- Ziel: API-Emulation(≠ Virtualisierung!)von UNIX und -Derivaten auf unterschiedlichen Prozessorarchitekturen +- mehrere unterschiedliche Emulatoren gleichzeitig lauffähig + - Emulation außerhalb des Kernels + - jeder Emulator: + - Komponente im Adressraum des Applikationsprogramms + - 1...n Server, die unabhängig von Applikationsprogramm laufen + +Mach-Server zur Emulation +- ![Abb.: [TaBo15]](Assets/AdvancedOperatingSystems-mach-server.png) +- Emulation von UNIX-Systemen mittels Mach-Serverprozessen + +μKernel-Funktionen +1. Prozessverwaltung +2. Speicherverwaltung +3. IPC-und E/A-Dienste, einschließlich Gerätetreiber + +unterstützte Abstraktionen ($\rightarrow$ API, Systemaufrufe): +1. Prozesse +2. Threads +3. Speicherobjekte +4. Ports (generisches, ortstransparentes Adressierungskonzept; vgl. UNIX ,,everything is a file'') +6. Botschaften +7. ... (sekundäre, von den obigen genutzte Abstraktionen) + +Architektur +- ![](Assets/AdvancedOperatingSystems-mach-architektur.png) + +- Systemaufrufkosten: + - IPC-Benchmark (1995): i486 Prozessor, 50 MHz + - Messung mit verschiedenen Botschaftenlängen( x - Werte) + - ohne Nutzdaten (0 Byte Botschaftenlänge): 115 μs (Tendenz unfreundlich ...) + - ![Heis19](Assets/AdvancedOperatingSystems-mach-systemaufruf.png) +- Bewertung aus heutiger Sicht: + - funktional komplex + - 153 Systemaufrufe + - mehrere Schnittstellen, parallele Implementierungen für eine Funktion + - $\rightarrow$ Adaptivität (Auswahl durch Programmierer) +- Fazit: + - zukunftsweisender Ansatz + - langsame und ineffiziente Implementierung + +Lessons Learned +- erster Versuch: + - Idee des Mikrokernelsbekannt + - Umsetzung: Designkriterienweitgehend unbekannt +- Folgen für Performanz und Programmierkomfort: [Heis19] + - ✗ ,,complex'' + - ✗ ,,inflexible'' + - ✗ ,,slow'' +- wir wissen etwas über Kosten: IPC-Performanz, Kernelabstraktionen +- wir wissen noch nichts über guten μKern-Funktionsumfangund gute Schnittstellen... +- $\rightarrow$ nächstes Ziel! + +### L4 +- Made in Germany: + - Jochen Liedtke (GMD, ,,Gesellschaft für Mathematik und Datenverarbeitung''), Betriebssystemgruppe (u.a.): J. Liedtke, H. Härtig, W. E. Kühnhauser + - Symposium on Operating Systems Principles 1995 (SOSP '95): ,,On μ-Kernel Construction'' [Lied95] +- Analyse des Mach-Kernels: + 1. falsche Abstraktionen + 2. unperformanteKernelimplementierung + 3. prozessorunabhängige Implementierung + - Letzteres: effizienzschädliche Eigenschaft eines Mikrokernels + - Neuimplementierung eines (konzeptionell sauberen!) μ-Kerns kaum teurer als Portierung auf andere Prozessorarchitektur + +L3 und L4 +- Mikrokerne der 2. Generation + - zunächst L3, insbesondere Nachfolger L4: erste Mikrokerne der 2. Generation +- vollständige Überarbeitung des Mikrokernkonzepts: wesentliche Probleme der 1. Generation (z.B. Mach) vermieden +- Bsp.: durchschnittliche Performanz von User-Mode IPC in L3 ggü. Mach: Faktor 22 zugunsten L3 + - heute: verschiedene Weiterentwicklungen von L4 (bezeichnet heute Familie ähnlicher Mikrokerne) + + | First generation | Second Generation | Third generation | + | --------------------------------------------------- | ---------------------------------------------------- | --------------------------------------------------- | + | Eg Mach [87] | Eg L4 [95] | seL4 [09] | + | ![](Assets/AdvancedOperatingSystems-l4-first-g.png) | ![](Assets/AdvancedOperatingSystems-L4-second-g.png) | ![](Assets/AdvancedOperatingSystems-l4-third-g.png) | + | 180 syscalls | ~7 syscalls | ~3 syscalls | + | 100 kLOC | ~10 kLOC | 9 kLOC | + | 100 $\mu s$ IPC | ~1 $\mu s$ IPC | $0,2-1 \mu s$ IPC | + +#### Mikrokernel-Designprinzipien +- Was gehört in einen Mikrokern? + - Liedtke: Unterscheidung zwischen Konzepten und deren Implementierung + - bestimmende Anforderungen an beide: + - Konzeptsicht $\rightarrow$ Funktionalität, + - Implementierungssicht $\rightarrow$ Performanz + - $\rightarrow$ 1. μKernel-Generation: Konzept durch Performanzentscheidungen aufgeweicht + - $\rightarrow$ Effekt in der Praxis genau gegenteilig: schlechte (IPC-) Performanz! + +> ,,The determining criterion used is functionality, not performance. More precisely, a concept is tolerated inside the μ-kernel only if moving it outside the kernel, i.e. permitting competing implementations, would prevent the implementation of the systems‘s required functionality .'' [Jochen Liedtke] + +Designprinzipien für Mikrokernel-Konzept: +- $\rightarrow$ Annahmen hinsichtlich der funktionalen Anforderungen: +1. System interaktive und nicht vollständig vertrauenswürdige Applikationen unterstützen ($\rightarrow$ HW-Schutz, -Multiplexing), +2. Hardware mit virtueller Speicherverwaltung und Paging + +Designprinzipien: +1. Autonomie: ,,Ein Subsystem (Server)muss so implementiert werden können, dass es von keinem anderen Subsystem gestört oder korrumpiert werden kann.'' +2. Integrität: ,,Subsystem (Server) $S_1$ muss sich auf Garantien von $S_2$ verlassen können. D.h. beide Subsysteme müssen miteinander kommunizieren können, ohne dass ein drittes Subsystem diese Kommunikation stören, fälschen oder abhören kann.'' + +L4: Speicherabstraktion +- Adressraum: Abbildung, die jede virtuelle Seite auf einen physischen Seitenrahmen abbildet oder als ,,nicht zugreifbar'' markiert +- Implementierung über Seitentabellen, unterstützt durch MMU-Hardware +- Aufgabe des Mikrokernels (als gemeinsame obligatorische Schicht aller Subsysteme): muss Hardware-Konzept des Adressraums verbergen und durch eigenes Adressraum-Konzept überlagern (sonst Implementierung von VMM-Mechanismen durch Server unmöglich) +- Mikrokernel-Konzept des Adressraums: + - muss Implementierung von beliebigen virtuellen Speicherverwaltungs-und -schutzkonzepten oberhalb des Mikrokernels (d.h. in den Subsystemen) erlauben + - sollte einfach und dem Hardware-Konzept ähnlich sein +- Idee: abstrakte Speicherverwaltung + - rekursive Konstruktion und Verwaltung der Adressräume auf Benutzer-(Server-)Ebene + - Mikrokernel stellt dafür genau drei Operationen bereit: + 1. grant(x) - Server $S$ überträgt Seite $x$ seines AR in AR von Empfänger $S‘$ + 2. map(x) - Server $S$ bildet Seite $x$ seines AR in AR von Empfänger $S‘$ ab + 3. flush(x) - Server $S$ entfernt (flusht) Seite x seines AR aus allen fremden AR + +Hierarchische Adressräume +- Rekursive Konstruktion der Adressraumhierarchie + - Server und Anwendungenkönnen damit ihren Klienten Seiten des eigenen Adressraumes zur Verfügung stellen + - Realspeicher: Ur-Adressraum, vom μKernel verwaltet + - Speicherverwaltung(en), Paging usw.: vollständig außerhalb des μ-Kernels realisiert + - ![](Assets/AdvancedOperatingSystems-adressraumhierarchie.png) + +L4: Threadabstraktion +- Thread + - innerhalb eines Adressraumesablaufende Aktivität + - $\rightarrow$ Adressraumzuordnung ist essenziell für Threadkonzept (Code + Daten) + - Bindung an Adressraum: dynamisch oder fest + - Änderung einer dynamischen Zuordnung: darf nur unter vertrauenswürdiger Kontrolle erfolgen (sonst: fremde Adressräume les- und korrumpierbar) +- Designentscheidung + - $\rightarrow$ Autonomieprinzip + - $\rightarrow$ Konsequenz: Adressraumisolation + - $\rightarrow$ entscheidender Grund zur Realisierung des Thread-Konzepts innerhalb des Mikrokernels + +IPC +- Interprozess-Kommunikation + - Kommunikation über Adressraumgrenzen: vertrauenswürdig kontrollierte Aufhebung der Isolation + - $\rightarrow$ essenziell für (sinnvolles) Multitasking und -threading +- Designentscheidung + - $\rightarrow$ Integritätsprinzip + - $\rightarrow$ wir haben schon: vertrauenswürdige Adressraumisolation im μKernel + - $\rightarrow$ grundlegendes IPC-Konzepts innerhalb des Mikrokernels (flexibel und dynamisch durch Server erweiterbar, analog Adressraumhierarchie) + +Identifikatoren +- Thread-und Ressourcenbezeichner + - müssen vertrauenswürdig vergeben (authentisch und i.A. persistent) und verwaltet(eindeutig und korrekt referenzierbar)werden + - $\rightarrow$ essenziell für (sinnvolles) Multitasking und -threading + - $\rightarrow$ essenziell für vertrauenswürdige Kernel-und Server-Schnittstellen +- Designentscheidung + - $\rightarrow$ Integritätsprinzip + - $\rightarrow$ ID-Konzept innerhalb des Mikrokernels (wiederum: durch Server erweiterbar) + +Lessons Learned +1. Ein minimaler Mikrokernel + - soll Minimalmenge an geeigneten Abstraktionenzur Verfügung stellen: + - flexibel genug, um Implementierung beliebiger Betriebssysteme zu ermöglichen + - Nutzung umfangreicher Mengeverschiedener Hardware-Plattformen +2. Geeignete, funktional minimale Mechanismen im μKern: + - Adressraum mit map-, flush-, grant-Operation + - Threadsinklusive IPC + - eindeutige Identifikatoren +3. Wahl der geeigneten Abstraktionen: + - kritischfür Verifizierbarkeit ( $\rightarrow$ Robustheit), Adaptivität und optimierte Performanz des Mikrokerns +4. Bisherigen μ-Kernel-Abstraktionskonzepte: + 1. ungeeignete + 2. zu viele + 3. zu spezialisierte u. inflexible Abstraktionen +5. Konsequenzen für Mikrokernel-Implementierung + - müssen für jeden Prozessortyp neu implementiert werden + - sind deshalb prinzipiell nicht portierbar $\rightarrow$ L3-und L4-Prototypen by J. Liedtke: 99% Assemblercode +6. innerhalb eines Mikrokernels sind + 1. grundlegende Implementierungsentscheidungen + 2. meiste Algorithmen u. Datenstrukturen + - von Prozessorhardware abhängig + +- Fazit: + - Mikrokernelmit akzeptabler Performanz: hardwarespezifische Implementierung minimalerforderlicher, vom Prozessortyp unabhängiger Abstraktionen + - ![Heis19](Assets/AdvancedOperatingSystems-l4-ipc-performance.png) + +Heutige Bedeutung +- nach Tod von J. Liedtke (2001) auf Basis von L4 zahlreiche moderne BS +- L4 heute: Spezifikation eines Mikrokernels (nicht Implementierung) +- ![Heis19](Assets/AdvancedOperatingSystems-l4-family.png) +- Einige Weiterentwicklungen: + - TU Dresden (Hermann Härtig): Neuimplementierung in C++ (L4/Fiasco), Basis des Echtzeit-Betriebssystems DROPS, der VirtualisierungsplattformNOVA (genauer: Hypervisor) und des adaptiven BS-Kernels Fiasco.OC + - University ofNew South Wales (UNSW), Australien (Gernot Heiser): + - Implementierung von L4 auf verschiedenen 64 - Bit-Plattformen, bekannt als L4/MIPS, L4/Alpha + - Implementierung in C (Wartbarkeit, Performanz) + - Mit L4Ka::Pistachio bisher schnellste Implementierung von botschaftenbasierterIPC (2005: 36 Zyklen auf Itanium-Architektur) + - seit 2009: seL4, erster formal verifizierter BS-Kernel (d.h. mathematisch bewiesen, dass Implementierung funktional korrekt ist und nachweislich keinen Entwurfsfehler enthält) + +Zwischenfazit +- Begrenzung von Fehlerausbreitung ( $\rightarrow$ Folgen von errors ): + - konsequent modularisierte Architektur aus Subsystemen + - Isolationsmechanismen zwischen Subsystemen +- Konsequenzen für BS-Kernel: + - statische Isolation auf Quellcodeebene $\rightarrow$ strukturierte Programmierung + - dynamische Isolation zur Laufzeit $\rightarrow$ private virtuelle Adressräume + - Architektur, welche diese Mechanismen komponiert: Mikrokernel +- Was haben wir gewonnen? + - ✓ Adressraumisolation für sämtlichen nichtvertrauenswürdigen Code + - ✓ keine privilegierten Instruktionen in nvw. Code (Serverprozesse) + - ✓ geringe Größe (potenziell: Verifizierbarkeit) des Kernels + - ✓ neben Robustheit: Modularitätund Adaptivitätdes Kernels +- Und was noch nicht? + - ✗ Behandlung von Ausfällen ( $\rightarrow$ abstürzende Gerätetreiber ...) + +## 3.5 Micro-Reboots +- Beobachtungen am Ausfallverhalten von BS: + - Kernelfehler sind (potenziell) fatal für gesamtes System + - Anwendungsfehler sind es nicht + - $\rightarrow$ kleiner Kernel = geringeres Risiko von Systemausfällen + - $\rightarrow$ durch BS-Code in Serverprozessen: verbleibendes Risiko unabhängiger Teilausfälle von BS-Funktionalität (z.B. FS, Treiberprozesse, GUI, ...) +- Ergänzung zu Isolationsmechanismen: + - Mechanismen zur Behandlung von Subsystem-Ausfällen + - = Mechanismen zur Behandlung Anwendungs-, Server- und Gerätetreiberfehlen +- $\rightarrow$ Micro-Reboots + +Ansatz +- wir haben: + - kleinen, ergo vertrauenswürdigen (als fehlerfrei angenommenen)μKernel + - BS-Funktionalität in bedingt vertrauenswürdigen Serverprozessen (kontrollierbare, aber wesentlich größere Codebasis) + - Gerätetreiber und Anwendungen in nicht vertrauenswürdigen Prozessen (nicht kontrollierbare Codebasis) +- wir wollen: + - Systemausfälle verhindern durch Vermeidung von errors im Kernel $\rightarrow$ höchste Priorität + - Treiber-und Serverausfälle minimieren durch Verbergen ihrer Auswirkungen $\rightarrow$ nachgeordnete Priorität (Best-Effort-Prinzip) +- Idee: + - Systemausfälle $\rightarrow$ μKernel + - Treiber-und Serverausfälle $\rightarrow$ Neustart durch spezialisierten Serverprozess + +Beispiel: Ethernet-Treiberausfall +- ![](Assets/AdvancedOperatingSystems-ethernet-treiberausfall.png) +- schwarz: ausfallfreie Kommunikation +- rot: Ausfall und Behandlung +- blau: Wiederherstellung nach Ausfall + +Beispiel: Dateisystem-Serverausfall +- ![](Assets/AdvancedOperatingSystems-dateisystem-serverausfall.png) +- schwarz: ausfallfreie Kommunikation +- rot: Ausfall und Behandlung +- blau: Wiederherstellung nach Ausfall + +## Beispiel-Betriebssystem: MINIX +- Ziele: + - robustes Betriebssystems + - $\rightarrow$ Schutz gegen Sichtbarwerden von Fehlern(= Ausfälle) für Nutzer + - Fokus auf Anwendungsdomänen: Endanwender-Einzelplatzrechner (Desktop, Laptop, Smart*) und eingebettete Systeme + - Anliegen: Robustheit > Verständlichkeit > geringer HW-Bedarf +- aktuelle Version: MINIX 3.3.0 + +Architektur +- Kommunikationsschnittstellen ... + - ![](Assets/AdvancedOperatingSystems-minix-architektur.png) + - ... für Anwendungen (weiß): Systemaufrufe im POSIX-Standard + - ... für Serverprozesse (grau): + - untereinander: IPC (botschaftenbasiert) + - mit Kernel: spezielle MINIX-API (kernel calls), für Anwendungsprozesse gesperrt +- Betriebssystem-Serverprozesse: + - ![](Assets/AdvancedOperatingSystems-minix-architektur-bs.png) + - Dateisystem (FS) + - Prozessmanagement (PM) + - Netzwerkmanagement (Net) + - Reincarnation Server (RS) $\rightarrow$ Micro-Reboots jeglicher Serverprozesse + - (u. a.) ... +- Kernelprozesse: + - systemtask + - clocktask + +Reincarnation Server +- Implementierungstechnik für Micro-Reboots: +- Prozesse zum Systemstart ( $\rightarrow$ Kernel Image): system, clock, init, rs + - system, clock: Kernelprogramm + - init: Bootstrapping (Initialisierung von rs und anderer BS-Serverprozesse), Fork der Login-Shell (und damit sämtlicher Anwendungsprozesse) + - rs: Fork sämtlicher BS-Serverprozesse, einschließlich Gerätetreiber +- ![](Assets/AdvancedOperatingSystems-minix-reincarnation-server.png) + +MINIX: Ausprobieren +- [ausführliche Dokumentation](https://wiki.minix3.org/doku.php?id=www:getting-started:start) +- [vorkompiliertes Kernel-Image zum Installieren (VirtualBox, VMWare, ...)](https://wiki.minix3.org/doku.php?id=www:download:start) + +## Verfügbarkeit +- komplementäre NFE zu Robustheit: Verfügbarkeit ( availability ) + - Zur Erinnerung: Untereigenschaften von Verlässlichkeit + 1. Verfügbarkeit (availability) + 2. Robustheit (robustness, reliability) +- Beziehung: + - Verbesserung von Robustheit $\Rightarrow$ Verbesserung von Verfügbarkeit + - Robustheitsmaßnahmen hinreichend , nicht notwendig (hochverfügbare Systeme können sehr wohl von Ausfällen betroffen sein...) +- eine weitere komplementäre NFE: + - Robustheit $\Rightarrow$ Sicherheit (security) + +Allgemeine Definition: Der Grad, zu welchem ein System oder eine Komponente funktionsfähig und zugänglich (erreichbar) ist,wann immer seine Nutzung erforderlichist. (IEEE) + +genauer quantifiziert: +- Der Anteil an Laufzeit eines Systems, in dem dieses seine spezifizierte Leistung erbringt. +- ![](Assets/AdvancedOperatingSystems-verfügbarkeit-laufzeit.png) +- Availability= Total Uptime/ Total Lifetime= MTTF / (MTTF + MTTR) + - MTTR: Mean Time to Recovery ... Erwartungswert für TTR + - MTTF: Mean Time to Failure ... Erwartungswert für TTF +- einige Verfügbarkeitsklassen: + | Verfügbarkeit | Ausfallzeit pro Jahr | Ausfallzeit pro Woche | + | ------------- | -------------------- | --------------------- | + | 90% | > 1 Monat | ca. 17 Stunden | + | 99% | ca. 4 Tage | ca. 2 Stunden | + | 99,9% | ca. 9 Stunden | ca. 10 Minuten | + | 99,99% | ca. 1 Stunde | ca. 1 Minute | + | 99,999% | ca. 5 Minuten | ca. 6 Sekunden | + | 99,9999% | ca. 2 Sekunden | << 1 Sekunde | +- Hochverfügbarkeitsbereich (gefeierte ,,five nines'' availability) +- Maßnahmen: + - Robustheitsmaßnahmen + - Redundanz + - Ausfallmanagement + +### QNX Neutrino: Hochverfügbares Echtzeit-BS +Überblick QNX: +- Mikrokern-Betriebssystem +- primäres Einsatzfeld: eingebettete Systeme, z.B. Automobilbau +- Mikrokernarchitektur mit Adressraumisolation für Gerätetreiber +- (begrenzt) dynamische Micro-Rebootsmöglich +- $\rightarrow$ Maximierung der Uptime des Gesamtsystems + +Hochverfügbarkeitsmechanismen: +1. ,,High-Avalability-Manager'': Laufzeit-Monitor, der Systemdienste oder Anwendungsprozesse überwacht und neustartet $\rightarrow$ μReboot-Server +2. ,,High-Availability-Client-Libraries'': Funktionen zur transparenten automatischen Reboot für ausgefallene Server-Verbindungen + # Sicherheit # Echtzeitfähigkeit # Adaptivität @@ -667,4 +1350,18 @@ Einflussfaktoren des Betriebssystems: - MANLEY, JOHNH.: Embedded Systems, MARCINIAK, J. J.(Hrsg.) - TinyOS - KELLNER, SIMON; BELLOSA, FRANK: Energy Accounting Support in TinyOS - - KELLNER, SIMON: Flexible Online Energy Accounting in TinyOS \ No newline at end of file + - KELLNER, SIMON: Flexible Online Energy Accounting in TinyOS +- Verlässlichkeitsbegriff, Fehlermodell: + - [ALRL04] AVIŽIENIS, ALGIRDAS; LAPRIE, JEAN-CLAUDE; RANDELL, BRIAN; LANDWEHR, CARL: Basic Concepts and Taxonomy of Dependable and Secure Computing. In: IEEE Trans. Dependable Secur. Comput. https://doi.org/10.1109/TDSC.2004.2 + - [AvLR04] AVIŽIENIS, ALGIRDAS; LAPRIE, JEAN-CLAUDE; RANDELL, BRIAN: Dependability and Its Threats: A Taxonomy. In: JACQUART, R.(Hrsg.): Building theInformation Society , IFIP International Federation for Information Processing : Springer US, 2004, https://doi.org/10.1007/978 +- DeepSpace 1 Remote Debugging: + - GARRET, RON: Lispingat JPL. URL http://www.flownet.com/gat/jpl-lisp.html +- Kernelarchitekturdesign und Mikrokernelprinzip: + - [Heis19] HEISER, GERNOT: COMP9242 Advanced Operating Systems. Lecture Slides UNSW Australia, 2019. Courtesy of Gernot Heiser, UNSW. https://www.cse.unsw.edu.au/~cs9242/19/lectures.shtml + - [TaBo15] TANENBAUM, ANDREWS; WOODHULL, ALBERTS: Operating Systems Design and Implementation. 3. Aufl. UpperSaddleRiver, NJ, USA: Prentice-Hall, Inc., 2005 +- Mikrokerneldesign, L4: + - [Lied95] LIEDTKE, JOCHEN: On μ-Kernel Construction. In: Operating Systems Review. Special issue for the Fifteenth ACM Symposium on Operating System Principles Bd. 29 (1995), https://doi.org/10.1145/224056.224075 +- MINIX: + - HERDER, JORRITN.; BOS, HERBERT; GRAS, BEN; HOMBURG, PHILIP; TANENBAUM, ANDREWS.: MINIX 3: A Highly Reliable, Self-repairing Operating System. In: ACM SIGOPS Operating Systems Review https://doi.org/10.1145/1151374.1151391 + - TANENBAUM, ANDREWS. APPUSWAMY, RAJA; BOS, HERBERTJ. ; CAVALLARO, LORENZO; GIUFFRIDA, CRISTIANO; HRUBY, TOMAS; HERDER, JORRIT; VANDERKOUWE, ERIK; U.A.: MINIX 3: Status Report and Current Research. In: login: The USENIX Magazine Bd. 35 (2010) https://www.usenix.org/publications/login/june- 2010 + - [TaWo05] TANENBAUM, ANDREWS; WOODHULL, ALBERTS: Operating Systems Design and Implementation. 3. Aufl. UpperSaddleRiver, NJ, USA: Prentice-Hall, Inc. \ No newline at end of file diff --git a/Assets/Advanced-Operating-Systems-systemaufrufkosten.png b/Assets/Advanced-Operating-Systems-systemaufrufkosten.png new file mode 100644 index 0000000..5f29251 Binary files /dev/null and b/Assets/Advanced-Operating-Systems-systemaufrufkosten.png differ diff --git a/Assets/AdvancedOperatingSystems-L4-second-g.png b/Assets/AdvancedOperatingSystems-L4-second-g.png new file mode 100644 index 0000000..e4c1d2b Binary files /dev/null and b/Assets/AdvancedOperatingSystems-L4-second-g.png differ diff --git a/Assets/AdvancedOperatingSystems-adressraumhierarchie.png b/Assets/AdvancedOperatingSystems-adressraumhierarchie.png new file mode 100644 index 0000000..7052f72 Binary files /dev/null and b/Assets/AdvancedOperatingSystems-adressraumhierarchie.png differ diff --git a/Assets/AdvancedOperatingSystems-dateisystem-serverausfall.png b/Assets/AdvancedOperatingSystems-dateisystem-serverausfall.png new file mode 100644 index 0000000..eb67dd6 Binary files /dev/null and b/Assets/AdvancedOperatingSystems-dateisystem-serverausfall.png differ diff --git a/Assets/AdvancedOperatingSystems-ethernet-treiberausfall.png b/Assets/AdvancedOperatingSystems-ethernet-treiberausfall.png new file mode 100644 index 0000000..a8fbbb9 Binary files /dev/null and b/Assets/AdvancedOperatingSystems-ethernet-treiberausfall.png differ diff --git a/Assets/AdvancedOperatingSystems-fehler.png b/Assets/AdvancedOperatingSystems-fehler.png new file mode 100644 index 0000000..96868fa Binary files /dev/null and b/Assets/AdvancedOperatingSystems-fehler.png differ diff --git a/Assets/AdvancedOperatingSystems-l4-family.png b/Assets/AdvancedOperatingSystems-l4-family.png new file mode 100644 index 0000000..ef3aad0 Binary files /dev/null and b/Assets/AdvancedOperatingSystems-l4-family.png differ diff --git a/Assets/AdvancedOperatingSystems-l4-first-g.png b/Assets/AdvancedOperatingSystems-l4-first-g.png new file mode 100644 index 0000000..4d311aa Binary files /dev/null and b/Assets/AdvancedOperatingSystems-l4-first-g.png differ diff --git a/Assets/AdvancedOperatingSystems-l4-ipc-performance.png b/Assets/AdvancedOperatingSystems-l4-ipc-performance.png new file mode 100644 index 0000000..aba7a30 Binary files /dev/null and b/Assets/AdvancedOperatingSystems-l4-ipc-performance.png differ diff --git a/Assets/AdvancedOperatingSystems-l4-third-g.png b/Assets/AdvancedOperatingSystems-l4-third-g.png new file mode 100644 index 0000000..98deaa9 Binary files /dev/null and b/Assets/AdvancedOperatingSystems-l4-third-g.png differ diff --git a/Assets/AdvancedOperatingSystems-mach-architektur.png b/Assets/AdvancedOperatingSystems-mach-architektur.png new file mode 100644 index 0000000..268c960 Binary files /dev/null and b/Assets/AdvancedOperatingSystems-mach-architektur.png differ diff --git a/Assets/AdvancedOperatingSystems-mach-server.png b/Assets/AdvancedOperatingSystems-mach-server.png new file mode 100644 index 0000000..3b6c31c Binary files /dev/null and b/Assets/AdvancedOperatingSystems-mach-server.png differ diff --git a/Assets/AdvancedOperatingSystems-mach-systemaufruf.png b/Assets/AdvancedOperatingSystems-mach-systemaufruf.png new file mode 100644 index 0000000..90d35a4 Binary files /dev/null and b/Assets/AdvancedOperatingSystems-mach-systemaufruf.png differ diff --git a/Assets/AdvancedOperatingSystems-makrokernel.png b/Assets/AdvancedOperatingSystems-makrokernel.png new file mode 100644 index 0000000..c058b01 Binary files /dev/null and b/Assets/AdvancedOperatingSystems-makrokernel.png differ diff --git a/Assets/AdvancedOperatingSystems-makrokernelarchitektur.png b/Assets/AdvancedOperatingSystems-makrokernelarchitektur.png new file mode 100644 index 0000000..958cabc Binary files /dev/null and b/Assets/AdvancedOperatingSystems-makrokernelarchitektur.png differ diff --git a/Assets/AdvancedOperatingSystems-mikrokernel.png b/Assets/AdvancedOperatingSystems-mikrokernel.png new file mode 100644 index 0000000..1e35a48 Binary files /dev/null and b/Assets/AdvancedOperatingSystems-mikrokernel.png differ diff --git a/Assets/AdvancedOperatingSystems-minix-architektur-bs.png b/Assets/AdvancedOperatingSystems-minix-architektur-bs.png new file mode 100644 index 0000000..d09af7b Binary files /dev/null and b/Assets/AdvancedOperatingSystems-minix-architektur-bs.png differ diff --git a/Assets/AdvancedOperatingSystems-minix-architektur.png b/Assets/AdvancedOperatingSystems-minix-architektur.png new file mode 100644 index 0000000..95a378b Binary files /dev/null and b/Assets/AdvancedOperatingSystems-minix-architektur.png differ diff --git a/Assets/AdvancedOperatingSystems-minix-reincarnation-server.png b/Assets/AdvancedOperatingSystems-minix-reincarnation-server.png new file mode 100644 index 0000000..213a324 Binary files /dev/null and b/Assets/AdvancedOperatingSystems-minix-reincarnation-server.png differ diff --git a/Assets/AdvancedOperatingSystems-modularer-makrokernel-2.png b/Assets/AdvancedOperatingSystems-modularer-makrokernel-2.png new file mode 100644 index 0000000..0cab0e4 Binary files /dev/null and b/Assets/AdvancedOperatingSystems-modularer-makrokernel-2.png differ diff --git a/Assets/AdvancedOperatingSystems-modularer-makrokernel.png b/Assets/AdvancedOperatingSystems-modularer-makrokernel.png new file mode 100644 index 0000000..324464e Binary files /dev/null and b/Assets/AdvancedOperatingSystems-modularer-makrokernel.png differ diff --git a/Assets/AdvancedOperatingSystems-private-virtuelle-adressräume.png b/Assets/AdvancedOperatingSystems-private-virtuelle-adressräume.png new file mode 100644 index 0000000..f943e09 Binary files /dev/null and b/Assets/AdvancedOperatingSystems-private-virtuelle-adressräume.png differ diff --git a/Assets/AdvancedOperatingSystems-treiber-kernel-fehler.png b/Assets/AdvancedOperatingSystems-treiber-kernel-fehler.png new file mode 100644 index 0000000..15fc526 Binary files /dev/null and b/Assets/AdvancedOperatingSystems-treiber-kernel-fehler.png differ diff --git a/Assets/AdvancedOperatingSystems-treiber-kernel.png b/Assets/AdvancedOperatingSystems-treiber-kernel.png new file mode 100644 index 0000000..decd115 Binary files /dev/null and b/Assets/AdvancedOperatingSystems-treiber-kernel.png differ diff --git a/Assets/AdvancedOperatingSystems-verfügbarkeit-laufzeit.png b/Assets/AdvancedOperatingSystems-verfügbarkeit-laufzeit.png new file mode 100644 index 0000000..63d93db Binary files /dev/null and b/Assets/AdvancedOperatingSystems-verfügbarkeit-laufzeit.png differ diff --git a/Assets/AdvancedOperatingSystems-virtuelle-kernel-adressräume.png b/Assets/AdvancedOperatingSystems-virtuelle-kernel-adressräume.png new file mode 100644 index 0000000..e5e1c8f Binary files /dev/null and b/Assets/AdvancedOperatingSystems-virtuelle-kernel-adressräume.png differ diff --git a/Assets/AdvancedOperatingSystems-virtuelle-vs-physische-adresse.png b/Assets/AdvancedOperatingSystems-virtuelle-vs-physische-adresse.png new file mode 100644 index 0000000..fd21471 Binary files /dev/null and b/Assets/AdvancedOperatingSystems-virtuelle-vs-physische-adresse.png differ diff --git a/Assets/Biosignalverarbeitung-AD289.png b/Assets/Biosignalverarbeitung-AD289.png new file mode 100644 index 0000000..8e822c3 Binary files /dev/null and b/Assets/Biosignalverarbeitung-AD289.png differ diff --git a/Assets/Biosignalverarbeitung-Diff-und-Gleichtakt.png b/Assets/Biosignalverarbeitung-Diff-und-Gleichtakt.png new file mode 100644 index 0000000..b8e9035 Binary files /dev/null and b/Assets/Biosignalverarbeitung-Diff-und-Gleichtakt.png differ diff --git a/Assets/Biosignalverarbeitung-Diff-und-Gleichtakt2.png b/Assets/Biosignalverarbeitung-Diff-und-Gleichtakt2.png new file mode 100644 index 0000000..8db7f84 Binary files /dev/null and b/Assets/Biosignalverarbeitung-Diff-und-Gleichtakt2.png differ diff --git a/Assets/Biosignalverarbeitung-Differenzverstärker-asymmetrisch.png b/Assets/Biosignalverarbeitung-Differenzverstärker-asymmetrisch.png new file mode 100644 index 0000000..4b21ece Binary files /dev/null and b/Assets/Biosignalverarbeitung-Differenzverstärker-asymmetrisch.png differ diff --git a/Assets/Biosignalverarbeitung-Differenzverstärker-funktion.png b/Assets/Biosignalverarbeitung-Differenzverstärker-funktion.png new file mode 100644 index 0000000..be060b4 Binary files /dev/null and b/Assets/Biosignalverarbeitung-Differenzverstärker-funktion.png differ diff --git a/Assets/Biosignalverarbeitung-EKG-kontinuierlich-spektrum.png b/Assets/Biosignalverarbeitung-EKG-kontinuierlich-spektrum.png new file mode 100644 index 0000000..502db2a Binary files /dev/null and b/Assets/Biosignalverarbeitung-EKG-kontinuierlich-spektrum.png differ diff --git a/Assets/Biosignalverarbeitung-EKG-tasten-falten.png b/Assets/Biosignalverarbeitung-EKG-tasten-falten.png new file mode 100644 index 0000000..5102cd3 Binary files /dev/null and b/Assets/Biosignalverarbeitung-EKG-tasten-falten.png differ diff --git a/Assets/Biosignalverarbeitung-Filtertheorie.png b/Assets/Biosignalverarbeitung-Filtertheorie.png new file mode 100644 index 0000000..6023f55 Binary files /dev/null and b/Assets/Biosignalverarbeitung-Filtertheorie.png differ diff --git a/Assets/Biosignalverarbeitung-Filtertheorie2.png b/Assets/Biosignalverarbeitung-Filtertheorie2.png new file mode 100644 index 0000000..eeb50de Binary files /dev/null and b/Assets/Biosignalverarbeitung-Filtertheorie2.png differ diff --git a/Assets/Biosignalverarbeitung-Galvanische-trennung.png b/Assets/Biosignalverarbeitung-Galvanische-trennung.png new file mode 100644 index 0000000..3be2b10 Binary files /dev/null and b/Assets/Biosignalverarbeitung-Galvanische-trennung.png differ diff --git a/Assets/Biosignalverarbeitung-Gradiometer.png b/Assets/Biosignalverarbeitung-Gradiometer.png new file mode 100644 index 0000000..212a8d0 Binary files /dev/null and b/Assets/Biosignalverarbeitung-Gradiometer.png differ diff --git a/Assets/Biosignalverarbeitung-Isolationsverstäker.png b/Assets/Biosignalverarbeitung-Isolationsverstäker.png new file mode 100644 index 0000000..dd81dc1 Binary files /dev/null and b/Assets/Biosignalverarbeitung-Isolationsverstäker.png differ diff --git a/Assets/Biosignalverarbeitung-Linearität-arbeitsbereich.png b/Assets/Biosignalverarbeitung-Linearität-arbeitsbereich.png new file mode 100644 index 0000000..c98fdb9 Binary files /dev/null and b/Assets/Biosignalverarbeitung-Linearität-arbeitsbereich.png differ diff --git a/Assets/Biosignalverarbeitung-Mehrkanalsysteme.png b/Assets/Biosignalverarbeitung-Mehrkanalsysteme.png new file mode 100644 index 0000000..b9c19a2 Binary files /dev/null and b/Assets/Biosignalverarbeitung-Mehrkanalsysteme.png differ diff --git a/Assets/Biosignalverarbeitung-Mehrkanalsysteme2.png b/Assets/Biosignalverarbeitung-Mehrkanalsysteme2.png new file mode 100644 index 0000000..ded70c6 Binary files /dev/null and b/Assets/Biosignalverarbeitung-Mehrkanalsysteme2.png differ diff --git a/Assets/Biosignalverarbeitung-Mehrkanalsysteme3.png b/Assets/Biosignalverarbeitung-Mehrkanalsysteme3.png new file mode 100644 index 0000000..b0e1b0c Binary files /dev/null and b/Assets/Biosignalverarbeitung-Mehrkanalsysteme3.png differ diff --git a/Assets/Biosignalverarbeitung-Mehrkanalsysteme4.png b/Assets/Biosignalverarbeitung-Mehrkanalsysteme4.png new file mode 100644 index 0000000..bab1f43 Binary files /dev/null and b/Assets/Biosignalverarbeitung-Mehrkanalsysteme4.png differ diff --git a/Assets/Biosignalverarbeitung-Pulsamplitudenmodulation.png b/Assets/Biosignalverarbeitung-Pulsamplitudenmodulation.png new file mode 100644 index 0000000..a699018 Binary files /dev/null and b/Assets/Biosignalverarbeitung-Pulsamplitudenmodulation.png differ diff --git a/Assets/Biosignalverarbeitung-abtastung-kotelnikov.png b/Assets/Biosignalverarbeitung-abtastung-kotelnikov.png new file mode 100644 index 0000000..4fa89bf Binary files /dev/null and b/Assets/Biosignalverarbeitung-abtastung-kotelnikov.png differ diff --git a/Assets/Biosignalverarbeitung-abtastung-rekonstruktion.png b/Assets/Biosignalverarbeitung-abtastung-rekonstruktion.png new file mode 100644 index 0000000..c75adcf Binary files /dev/null and b/Assets/Biosignalverarbeitung-abtastung-rekonstruktion.png differ diff --git a/Assets/Biosignalverarbeitung-aktive-elektroden.png b/Assets/Biosignalverarbeitung-aktive-elektroden.png new file mode 100644 index 0000000..9bf71df Binary files /dev/null and b/Assets/Biosignalverarbeitung-aktive-elektroden.png differ diff --git a/Assets/Biosignalverarbeitung-aktive-filter.png b/Assets/Biosignalverarbeitung-aktive-filter.png new file mode 100644 index 0000000..194087d Binary files /dev/null and b/Assets/Biosignalverarbeitung-aktive-filter.png differ diff --git a/Assets/Biosignalverarbeitung-aktive-filter2.png b/Assets/Biosignalverarbeitung-aktive-filter2.png new file mode 100644 index 0000000..235a4e2 Binary files /dev/null and b/Assets/Biosignalverarbeitung-aktive-filter2.png differ diff --git a/Assets/Biosignalverarbeitung-amplitudenmodulation.png b/Assets/Biosignalverarbeitung-amplitudenmodulation.png new file mode 100644 index 0000000..0cb6874 Binary files /dev/null and b/Assets/Biosignalverarbeitung-amplitudenmodulation.png differ diff --git a/Assets/Biosignalverarbeitung-beispiel-film.png b/Assets/Biosignalverarbeitung-beispiel-film.png new file mode 100644 index 0000000..420553d Binary files /dev/null and b/Assets/Biosignalverarbeitung-beispiel-film.png differ diff --git a/Assets/Biosignalverarbeitung-diskreter-integrator-mit-ov.png b/Assets/Biosignalverarbeitung-diskreter-integrator-mit-ov.png new file mode 100644 index 0000000..b93f914 Binary files /dev/null and b/Assets/Biosignalverarbeitung-diskreter-integrator-mit-ov.png differ diff --git a/Assets/Biosignalverarbeitung-eigenrauschen.png b/Assets/Biosignalverarbeitung-eigenrauschen.png new file mode 100644 index 0000000..4f1dbe3 Binary files /dev/null and b/Assets/Biosignalverarbeitung-eigenrauschen.png differ diff --git a/Assets/Biosignalverarbeitung-ekg-verzerrt.png b/Assets/Biosignalverarbeitung-ekg-verzerrt.png new file mode 100644 index 0000000..7376f10 Binary files /dev/null and b/Assets/Biosignalverarbeitung-ekg-verzerrt.png differ diff --git a/Assets/Biosignalverarbeitung-ekg-verzerrt2.png b/Assets/Biosignalverarbeitung-ekg-verzerrt2.png new file mode 100644 index 0000000..f545f07 Binary files /dev/null and b/Assets/Biosignalverarbeitung-ekg-verzerrt2.png differ diff --git a/Assets/Biosignalverarbeitung-ekg.png b/Assets/Biosignalverarbeitung-ekg.png new file mode 100644 index 0000000..4edda10 Binary files /dev/null and b/Assets/Biosignalverarbeitung-ekg.png differ diff --git a/Assets/Biosignalverarbeitung-elektrochemische-grundlage.png b/Assets/Biosignalverarbeitung-elektrochemische-grundlage.png new file mode 100644 index 0000000..2997990 Binary files /dev/null and b/Assets/Biosignalverarbeitung-elektrochemische-grundlage.png differ diff --git a/Assets/Biosignalverarbeitung-elektrode-therapie.png b/Assets/Biosignalverarbeitung-elektrode-therapie.png new file mode 100644 index 0000000..2ac5112 Binary files /dev/null and b/Assets/Biosignalverarbeitung-elektrode-therapie.png differ diff --git a/Assets/Biosignalverarbeitung-elektroden.png b/Assets/Biosignalverarbeitung-elektroden.png new file mode 100644 index 0000000..6eff575 Binary files /dev/null and b/Assets/Biosignalverarbeitung-elektroden.png differ diff --git a/Assets/Biosignalverarbeitung-filterentwurf.png b/Assets/Biosignalverarbeitung-filterentwurf.png new file mode 100644 index 0000000..205c0f0 Binary files /dev/null and b/Assets/Biosignalverarbeitung-filterentwurf.png differ diff --git a/Assets/Biosignalverarbeitung-filterentwurf2.png b/Assets/Biosignalverarbeitung-filterentwurf2.png new file mode 100644 index 0000000..17f8de9 Binary files /dev/null and b/Assets/Biosignalverarbeitung-filterentwurf2.png differ diff --git a/Assets/Biosignalverarbeitung-gehirn-eeg.png b/Assets/Biosignalverarbeitung-gehirn-eeg.png new file mode 100644 index 0000000..65740bf Binary files /dev/null and b/Assets/Biosignalverarbeitung-gehirn-eeg.png differ diff --git a/Assets/Biosignalverarbeitung-gehirn-ekg.png b/Assets/Biosignalverarbeitung-gehirn-ekg.png new file mode 100644 index 0000000..d22d788 Binary files /dev/null and b/Assets/Biosignalverarbeitung-gehirn-ekg.png differ diff --git a/Assets/Biosignalverarbeitung-gehirn.png b/Assets/Biosignalverarbeitung-gehirn.png new file mode 100644 index 0000000..a778337 Binary files /dev/null and b/Assets/Biosignalverarbeitung-gehirn.png differ diff --git a/Assets/Biosignalverarbeitung-gradiometer-2.png b/Assets/Biosignalverarbeitung-gradiometer-2.png new file mode 100644 index 0000000..364e01d Binary files /dev/null and b/Assets/Biosignalverarbeitung-gradiometer-2.png differ diff --git a/Assets/Biosignalverarbeitung-guarding-real.png b/Assets/Biosignalverarbeitung-guarding-real.png new file mode 100644 index 0000000..5efc0fd Binary files /dev/null and b/Assets/Biosignalverarbeitung-guarding-real.png differ diff --git a/Assets/Biosignalverarbeitung-guarding.png b/Assets/Biosignalverarbeitung-guarding.png new file mode 100644 index 0000000..1c957d5 Binary files /dev/null and b/Assets/Biosignalverarbeitung-guarding.png differ diff --git a/Assets/Biosignalverarbeitung-guarding2.png b/Assets/Biosignalverarbeitung-guarding2.png new file mode 100644 index 0000000..846b7b3 Binary files /dev/null and b/Assets/Biosignalverarbeitung-guarding2.png differ diff --git a/Assets/Biosignalverarbeitung-herz-ekg.png b/Assets/Biosignalverarbeitung-herz-ekg.png new file mode 100644 index 0000000..080fddf Binary files /dev/null and b/Assets/Biosignalverarbeitung-herz-ekg.png differ diff --git a/Assets/Biosignalverarbeitung-hochpass-2.ordnung.png b/Assets/Biosignalverarbeitung-hochpass-2.ordnung.png new file mode 100644 index 0000000..c46f1b8 Binary files /dev/null and b/Assets/Biosignalverarbeitung-hochpass-2.ordnung.png differ diff --git a/Assets/Biosignalverarbeitung-hohe-gleichtaktunterdrückung.png b/Assets/Biosignalverarbeitung-hohe-gleichtaktunterdrückung.png new file mode 100644 index 0000000..9d4aa04 Binary files /dev/null and b/Assets/Biosignalverarbeitung-hohe-gleichtaktunterdrückung.png differ diff --git a/Assets/Biosignalverarbeitung-hoher-eingangswiderstand.png b/Assets/Biosignalverarbeitung-hoher-eingangswiderstand.png new file mode 100644 index 0000000..6f0ab76 Binary files /dev/null and b/Assets/Biosignalverarbeitung-hoher-eingangswiderstand.png differ diff --git a/Assets/Biosignalverarbeitung-integrierter-integrator-mit-sc.png b/Assets/Biosignalverarbeitung-integrierter-integrator-mit-sc.png new file mode 100644 index 0000000..4843fd7 Binary files /dev/null and b/Assets/Biosignalverarbeitung-integrierter-integrator-mit-sc.png differ diff --git a/Assets/Biosignalverarbeitung-kontinuierliches-signal.png b/Assets/Biosignalverarbeitung-kontinuierliches-signal.png new file mode 100644 index 0000000..85abc41 Binary files /dev/null and b/Assets/Biosignalverarbeitung-kontinuierliches-signal.png differ diff --git a/Assets/Biosignalverarbeitung-linearer-phasenfrequenzgang.png b/Assets/Biosignalverarbeitung-linearer-phasenfrequenzgang.png new file mode 100644 index 0000000..0c8833c Binary files /dev/null and b/Assets/Biosignalverarbeitung-linearer-phasenfrequenzgang.png differ diff --git a/Assets/Biosignalverarbeitung-masse-messung.png b/Assets/Biosignalverarbeitung-masse-messung.png new file mode 100644 index 0000000..ac75419 Binary files /dev/null and b/Assets/Biosignalverarbeitung-masse-messung.png differ diff --git a/Assets/Biosignalverarbeitung-massebezogen-brückenspannung.png b/Assets/Biosignalverarbeitung-massebezogen-brückenspannung.png new file mode 100644 index 0000000..1513c22 Binary files /dev/null and b/Assets/Biosignalverarbeitung-massebezogen-brückenspannung.png differ diff --git a/Assets/Biosignalverarbeitung-maxim7418.png b/Assets/Biosignalverarbeitung-maxim7418.png new file mode 100644 index 0000000..11c0300 Binary files /dev/null and b/Assets/Biosignalverarbeitung-maxim7418.png differ diff --git a/Assets/Biosignalverarbeitung-mehrstufiger-verstärker.png b/Assets/Biosignalverarbeitung-mehrstufiger-verstärker.png new file mode 100644 index 0000000..4b96e6c Binary files /dev/null and b/Assets/Biosignalverarbeitung-mehrstufiger-verstärker.png differ diff --git a/Assets/Biosignalverarbeitung-messspannung-massebezogen.png b/Assets/Biosignalverarbeitung-messspannung-massebezogen.png new file mode 100644 index 0000000..c3d99ce Binary files /dev/null and b/Assets/Biosignalverarbeitung-messspannung-massebezogen.png differ diff --git a/Assets/Biosignalverarbeitung-netzfrequenz-bandsperre.png b/Assets/Biosignalverarbeitung-netzfrequenz-bandsperre.png new file mode 100644 index 0000000..b2eefb1 Binary files /dev/null and b/Assets/Biosignalverarbeitung-netzfrequenz-bandsperre.png differ diff --git a/Assets/Biosignalverarbeitung-pegelanpassung.png b/Assets/Biosignalverarbeitung-pegelanpassung.png new file mode 100644 index 0000000..cdcc58b Binary files /dev/null and b/Assets/Biosignalverarbeitung-pegelanpassung.png differ diff --git a/Assets/Biosignalverarbeitung-pneumotachograph.png b/Assets/Biosignalverarbeitung-pneumotachograph.png new file mode 100644 index 0000000..b12cc1d Binary files /dev/null and b/Assets/Biosignalverarbeitung-pneumotachograph.png differ diff --git a/Assets/Biosignalverarbeitung-pulsoxy-1.png b/Assets/Biosignalverarbeitung-pulsoxy-1.png new file mode 100644 index 0000000..b8e5049 Binary files /dev/null and b/Assets/Biosignalverarbeitung-pulsoxy-1.png differ diff --git a/Assets/Biosignalverarbeitung-pulsoxy-2.png b/Assets/Biosignalverarbeitung-pulsoxy-2.png new file mode 100644 index 0000000..b6837e0 Binary files /dev/null and b/Assets/Biosignalverarbeitung-pulsoxy-2.png differ diff --git a/Assets/Biosignalverarbeitung-pulsoxy-3.png b/Assets/Biosignalverarbeitung-pulsoxy-3.png new file mode 100644 index 0000000..4eac212 Binary files /dev/null and b/Assets/Biosignalverarbeitung-pulsoxy-3.png differ diff --git a/Assets/Biosignalverarbeitung-pulsoxy-4.png b/Assets/Biosignalverarbeitung-pulsoxy-4.png new file mode 100644 index 0000000..9203516 Binary files /dev/null and b/Assets/Biosignalverarbeitung-pulsoxy-4.png differ diff --git a/Assets/Biosignalverarbeitung-pulsoxy-5.png b/Assets/Biosignalverarbeitung-pulsoxy-5.png new file mode 100644 index 0000000..3bdd80a Binary files /dev/null and b/Assets/Biosignalverarbeitung-pulsoxy-5.png differ diff --git a/Assets/Biosignalverarbeitung-pulsoxy-6.png b/Assets/Biosignalverarbeitung-pulsoxy-6.png new file mode 100644 index 0000000..61879ad Binary files /dev/null and b/Assets/Biosignalverarbeitung-pulsoxy-6.png differ diff --git a/Assets/Biosignalverarbeitung-pulsoxy-7.png b/Assets/Biosignalverarbeitung-pulsoxy-7.png new file mode 100644 index 0000000..367f5de Binary files /dev/null and b/Assets/Biosignalverarbeitung-pulsoxy-7.png differ diff --git a/Assets/Biosignalverarbeitung-pulsoxy-8.png b/Assets/Biosignalverarbeitung-pulsoxy-8.png new file mode 100644 index 0000000..c54e23a Binary files /dev/null and b/Assets/Biosignalverarbeitung-pulsoxy-8.png differ diff --git a/Assets/Biosignalverarbeitung-rekonstruierter-sinus.png b/Assets/Biosignalverarbeitung-rekonstruierter-sinus.png new file mode 100644 index 0000000..976a175 Binary files /dev/null and b/Assets/Biosignalverarbeitung-rekonstruierter-sinus.png differ diff --git a/Assets/Biosignalverarbeitung-squid.png b/Assets/Biosignalverarbeitung-squid.png new file mode 100644 index 0000000..85a2fcc Binary files /dev/null and b/Assets/Biosignalverarbeitung-squid.png differ diff --git a/Assets/Biosignalverarbeitung-tiefpass-2.ordnung.png b/Assets/Biosignalverarbeitung-tiefpass-2.ordnung.png new file mode 100644 index 0000000..82e72f6 Binary files /dev/null and b/Assets/Biosignalverarbeitung-tiefpass-2.ordnung.png differ diff --git a/Assets/Biosignalverarbeitung-trendelimination.png b/Assets/Biosignalverarbeitung-trendelimination.png new file mode 100644 index 0000000..65c42ed Binary files /dev/null and b/Assets/Biosignalverarbeitung-trendelimination.png differ diff --git a/Assets/Biosignalverarbeitung-ultraschall-doppler-2.png b/Assets/Biosignalverarbeitung-ultraschall-doppler-2.png new file mode 100644 index 0000000..c0c6eb7 Binary files /dev/null and b/Assets/Biosignalverarbeitung-ultraschall-doppler-2.png differ diff --git a/Assets/Biosignalverarbeitung-ultraschall-doppler.png b/Assets/Biosignalverarbeitung-ultraschall-doppler.png new file mode 100644 index 0000000..570aff7 Binary files /dev/null and b/Assets/Biosignalverarbeitung-ultraschall-doppler.png differ diff --git a/Assets/Biosignalverarbeitung-ultraschall-geschwindigkeit.png b/Assets/Biosignalverarbeitung-ultraschall-geschwindigkeit.png new file mode 100644 index 0000000..95c1010 Binary files /dev/null and b/Assets/Biosignalverarbeitung-ultraschall-geschwindigkeit.png differ diff --git a/Assets/Biosignalverarbeitung-zeitdiskretes-signal.png b/Assets/Biosignalverarbeitung-zeitdiskretes-signal.png new file mode 100644 index 0000000..3b37474 Binary files /dev/null and b/Assets/Biosignalverarbeitung-zeitdiskretes-signal.png differ diff --git a/Assets/NetworkSecurity-CBC-mac.png b/Assets/NetworkSecurity-CBC-mac.png new file mode 100644 index 0000000..f09d691 Binary files /dev/null and b/Assets/NetworkSecurity-CBC-mac.png differ diff --git a/Assets/NetworkSecurity-cipher-block-chaining-mode.png b/Assets/NetworkSecurity-cipher-block-chaining-mode.png new file mode 100644 index 0000000..c63ad07 Binary files /dev/null and b/Assets/NetworkSecurity-cipher-block-chaining-mode.png differ diff --git a/Assets/NetworkSecurity-ecc-1.png b/Assets/NetworkSecurity-ecc-1.png new file mode 100644 index 0000000..300c160 Binary files /dev/null and b/Assets/NetworkSecurity-ecc-1.png differ diff --git a/Assets/NetworkSecurity-ecc-2.png b/Assets/NetworkSecurity-ecc-2.png new file mode 100644 index 0000000..ce5f5da Binary files /dev/null and b/Assets/NetworkSecurity-ecc-2.png differ diff --git a/Assets/NetworkSecurity-ecc-3.png b/Assets/NetworkSecurity-ecc-3.png new file mode 100644 index 0000000..f812eae Binary files /dev/null and b/Assets/NetworkSecurity-ecc-3.png differ diff --git a/Assets/NetworkSecurity-ecc-4.png b/Assets/NetworkSecurity-ecc-4.png new file mode 100644 index 0000000..157e805 Binary files /dev/null and b/Assets/NetworkSecurity-ecc-4.png differ diff --git a/Assets/NetworkSecurity-ecc-5.png b/Assets/NetworkSecurity-ecc-5.png new file mode 100644 index 0000000..5ac4eac Binary files /dev/null and b/Assets/NetworkSecurity-ecc-5.png differ diff --git a/Assets/NetworkSecurity-feistel.png b/Assets/NetworkSecurity-feistel.png new file mode 100644 index 0000000..453100d Binary files /dev/null and b/Assets/NetworkSecurity-feistel.png differ diff --git a/Assets/NetworkSecurity-gcm.png b/Assets/NetworkSecurity-gcm.png new file mode 100644 index 0000000..8b92229 Binary files /dev/null and b/Assets/NetworkSecurity-gcm.png differ diff --git a/Assets/NetworkSecurity-md5.png b/Assets/NetworkSecurity-md5.png new file mode 100644 index 0000000..91d8e26 Binary files /dev/null and b/Assets/NetworkSecurity-md5.png differ diff --git a/Assets/NetworkSecurity-sha-2.png b/Assets/NetworkSecurity-sha-2.png new file mode 100644 index 0000000..bbd384e Binary files /dev/null and b/Assets/NetworkSecurity-sha-2.png differ diff --git a/Assets/NetworkSecurity-sha-3.png b/Assets/NetworkSecurity-sha-3.png new file mode 100644 index 0000000..97e61f6 Binary files /dev/null and b/Assets/NetworkSecurity-sha-3.png differ diff --git a/Assets/NetworkSecurity-sha1.png b/Assets/NetworkSecurity-sha1.png new file mode 100644 index 0000000..b9b1109 Binary files /dev/null and b/Assets/NetworkSecurity-sha1.png differ diff --git a/Assets/NetworkSecurity-sponge-wrap.png b/Assets/NetworkSecurity-sponge-wrap.png new file mode 100644 index 0000000..90d9b82 Binary files /dev/null and b/Assets/NetworkSecurity-sponge-wrap.png differ diff --git a/Grundlagen der Biosignalverarbeitung.md b/Grundlagen der Biosignalverarbeitung.md index f105ea9..ba776de 100644 --- a/Grundlagen der Biosignalverarbeitung.md +++ b/Grundlagen der Biosignalverarbeitung.md @@ -1,10 +1,65 @@ -# Biosignalverarbeitung -## Sensorik +Biosignalverarbeitung +- [Sensorik](#sensorik) + - [Klassifikation von Sensoren](#klassifikation-von-sensoren) + - [Druck, Dehnung und Kraft](#druck-dehnung-und-kraft) + - [Durchfluss, Volumen](#durchfluss-volumen) + - [Optische Sensoren](#optische-sensoren) + - [Akustische Sensoren](#akustische-sensoren) + - [Sensoren für elektrische Größen](#sensoren-für-elektrische-größen) + - [Elektrochemische Grundlagen](#elektrochemische-grundlagen) + - [Elektroden der Diagnostik](#elektroden-der-diagnostik) + - [Elektroden der Therapie](#elektroden-der-therapie) + - [Sensoren für magnetische Größen](#sensoren-für-magnetische-größen) + - [Messprinzipien](#messprinzipien) + - [Gradiometer](#gradiometer) + - [SQUID](#squid) +- [Verstärkung und analoge Filterung](#verstärkung-und-analoge-filterung) + - [Eigenschaften von Biosignalen und Störungen](#eigenschaften-von-biosignalen-und-störungen) + - [Entstehung der Biosignale, biologische Signalquellen](#entstehung-der-biosignale-biologische-signalquellen) + - [Biologische und technische Störquellen](#biologische-und-technische-störquellen) + - [Eigenschaften technischer Störungen](#eigenschaften-technischer-störungen) + - [Eigenschaften biologischer Störungen](#eigenschaften-biologischer-störungen) + - [Medizinische Messverstärker](#medizinische-messverstärker) + - [Dynamik, Linearität](#dynamik-linearität) + - [Eigenrauschen](#eigenrauschen) + - [Frequenzgang](#frequenzgang) + - [Differenzverstärker](#differenzverstärker) + - [Funktionsprinzip](#funktionsprinzip) + - [Differenz- und Gleichtaktverhalten](#differenz--und-gleichtaktverhalten) + - [Instrumentationsverstärker](#instrumentationsverstärker) + - [Mehrstufiger Verstärker](#mehrstufiger-verstärker) + - [Hoher Eingangswiderstand](#hoher-eingangswiderstand) + - [Hohe Gleichtaktunterdrückung](#hohe-gleichtaktunterdrückung) + - [Isolationsverstärker](#isolationsverstärker) + - [Funktionsprinzip](#funktionsprinzip-1) + - [Galvanische Trennung und ihre Auswirkung](#galvanische-trennung-und-ihre-auswirkung) + - [Datenübertragung, Modulation und Demodulation](#datenübertragung-modulation-und-demodulation) + - [Guardingtechnik](#guardingtechnik) + - [Funktionsprinzip](#funktionsprinzip-2) + - [Realisierung](#realisierung) + - [Aktive Elektroden](#aktive-elektroden) + - [Funktionsprinzip](#funktionsprinzip-3) + - [Störungsresistenz](#störungsresistenz) + - [Gleichtaktunterdrückung](#gleichtaktunterdrückung) + - [Analoge Filter](#analoge-filter) + - [Passive Filter](#passive-filter) + - [Grundlagen der Filtertheorie](#grundlagen-der-filtertheorie) + - [Filterentwurf](#filterentwurf) + - [Aktive Filter](#aktive-filter) + - [Linearer Phasenfrequenzgang](#linearer-phasenfrequenzgang) +- [Signalkonditionierung, Abtastung und Digitalisierung](#signalkonditionierung-abtastung-und-digitalisierung) + - [Pegelanpassung](#pegelanpassung) + - [Abstastung, Aliasing](#abstastung-aliasing) + - [Digitalisierung](#digitalisierung) + - [Telemetrie](#telemetrie) +- [Digitale Filterung](#digitale-filterung) + +# Sensorik Im Normalfall werden Sensoren verwendet, die eine physikalische oder chemische Größe in ein elektrisches Signal umwandeln bzw. eine elektrische Größe beeinflussen, die weiter verarbeitet werden können. Eine Umwandlung der Energieform der Biosignale ist notwendig. Selbst bei Sensoren für elektrische Größen ist eine Umwandlung (von Ionenleitung zur Elektronenleitung) nötig. Weitere Sensorengruppen, wie Temperatur-und chemische Sensoren werden hier nicht behandelt, da ihre Dynamik aus Sicht der BSA vernachlässigbar gering ist. -### Klassifikation von Sensoren +## Klassifikation von Sensoren Ein Sensor (lateinisch 'sensus': Gefühl) oder Fühler ist ein technisches Bauteil, das die physikalischen oder chemischen Eigenschaften (z.B. Wärmestrahlung, Temperatur, Feuchtigkeit, Druck, Schall, Helligkeit, Magnetismus, Beschleunigung, Kraft, elektrisches Potential) erfassen und in ein elektronisches oder ein anderes geeignetes Signal umwandeln kann. Man unterscheidet zwischen aktiven und passiven Sensoren @@ -26,7 +81,7 @@ Klassifikation nach Messgröße: - Akustik: Herzschalltöne, Atmung - Temperatur: Körpertemperatur -### Druck, Dehnung und Kraft +## Druck, Dehnung und Kraft Dehnmessstreifen (DMS) - Messprinzip: Dehnungsabhängiger Widerstand - Realisierung: Widerstandsdraht oder Halbleiter als Gitter auf Träger @@ -70,11 +125,629 @@ Dehnungsmessrosette: Wie man an diesen Konstruktionsbeispielen gut erkennen kann, bilden die Leitungen ungewollterweise eine Antenne, die alle vorhandenen Störungen aus der Umgebung aufnimmt, vor allem Netzeinstreuung, Mobilfunk und Computernetze. +Aufbau von Massebezogenen und Massefreien Messungen: +![](Assets/Biosignalverarbeitung-masse-messung.png) -### Durchfluss, Volumen -### Optische Sensoren -### Akustische Sensoren +Messspannung von $U_{R5}$ in der massebezogenen Schaltung +![](Assets/Biosignalverarbeitung-messspannung-massebezogen.png) +Bei massebezogener Messung - auch Single-End genannt, da gegen Masse - werden die Störungen direkt dem Messsignal überlagert, so dass später eine Trennung ohne aufwendige Signalverarbeitung kaum möglich ist. -## Verstärkung und analoge Filterung -## Signalkonditionierung, Abtastung und Digitalisierung -## Digitale Filterung +Massebezogne eBrückenspannung (rot, blau) und Indikatorspannung $U_d$ (grün) +![](Assets/Biosignalverarbeitung-massebezogen-brückenspannung.png) +Einen großen Teil der Netzstörung bilden die elektrostatischen (kapazitiv eingekoppelten) Felder, die Gleichtaktcharakter haben. Diese lassen sich also durch Differenzbildung -hier mit einer Wheatstonschen Brücke -zum Teil eliminieren. + +## Durchfluss, Volumen +- Massendurchfluss + - $\dot m=\frac{dm}{dt}$ + - $[\dot m]=\frac{kg}{h};\frac{g}{s} + - industriell relevante Größe, z.B. Kraftstoffe, Luftverbrauch im Motor +- Volumendurchfluss + - $\dot V=\frac{dV}{dt}$ + - $[\dot V]=\frac{m^3}{h};\frac{l}{min}$ + - wichtige Messgröße in der medizinischen Messtechnik: Blutfluss, Atmung, Gastrointestinalapparat +- Der Durchfluss eines Mediums ist eine der wichtigsten Größen in der technischen und medizinischen Messtechnik. Technisch vor allem der Massendurchfluss, medizinisch der Volumendurchfluss, da medizinisch grundsätzlich die Volumina diagnostisch relevante Größe darstellen. +- Bei bekannter durchflossener Fläche wird der Volumenfluss über die Geschwindigkeitsmessung ermittelt + - $\dot V=\frac{dV}{dt}=\frac{A*dl}{dt}= A*v$ + - Reale Verteilung der Geschwindigkeit ist Parabel mit Maximum in der Mitte $\rightarrow$ Gemessene Geschwindigkeit ist die mittlere Geschwindigkeit +- In der Medizin kann weder eine Geschwindigkeitsverteilung - wie in der Technik - erzwungen werden, noch kann sie vollständig erfasst werden. Daher misst man tatsächlich nur eine ,,mittlere'' Geschwindigkeit, wobei der Begriff ,,mittlere'' hier nicht ganz korrekt ist, da die tatsächliche Verteilung nach wie vor unbekannt ist. +- Messprinzip Druckdifferentmessung nach Gesetz von Hagen-Poiseuille + - $\dot V=\frac{dV}{dt}\frac{\pi d^4}{128\mu}*\frac{\delta p}{l}$ + - $d$ - Durchmesser der Kappilare + - $\delta p=p_A - p_B$ - Druckdifferenz über der Kapillare, abhängigkeit von der Strömungsgeschwindigkeit + - $l$ - Länge der Kapilalre + - $\mu$ - Viskosität des Mediums + - ![](Assets/Biosignalverarbeitung-pneumotachograph.png) + - Bsp: 10% Verengung der Kapillare $\rightarrow$ 34% Reduktion des Durchsatzes, d.h. im Blutkreislauf Anstieg des Blutdrucks um 34% + - Bei externen Sensoren der Durchflussmessung kann man die Messbedingungen relativ klar vorgeben, z.B. im Pneumotachographen. Man erzwingt kapillare Strömung, der Strömungswiderstand und die Fläche sind bekannt, so dass aus der Druckdifferenz direkt auf den Durchfluss geschlossen werden kann. +- Anwendung in der Medizintechnik + - Messung aller vitaler Lungenvolumina + - Messung des Blutflusses +- Nachteile des Messprinzips + - zusätzlicher Strömungswiderstand verfälscht das Ergebnis + - bei Temperaturunterschieden Kappilaren-Medium Tröpfchenbildung + - geringer Dynamikbereich (1:10) + - niedrige Messgenauigkeit wegen Turbulenzen an Kapillarenden + - direkter Kontakt mit Medium +- Ultraschall-Geschwindigkeitsmessung nach dem Laufzeitverfahren + - $v=\frac{T_2-T_1}{T_1 T_2}*\frac{L}{2\ cos\ \alpha}$ + - $v$ - mittlere Strömungsgeschwindigkeit des Mediums + - $T_1$ - Laufzeit des Ultraschalls mit der Strömung + - $T_2$ - Laufzeit des Ultraschalls gegen die Strömung + - $L$ - Länge des Ultraschall-Pfades + - $\alpha$ - Winkel zwischen der Strömung und dem Ultraschall-Pfad + - ![](Assets/Biosignalverarbeitung-ultraschall-geschwindigkeit.png) + - Vorteile + - kein Kontakt mit dem Medium, insbesondere Blutbahnen + - Installation und Messung ohne Unterbrechnung des Flusses + - Nachteile + - invasive Methode, da Blutgefäß freigelegt werden muss + - Ungenauigkeit wegen der Verfomung der Blutgefäße + - Signaleigenschafte + - verrauscht wegen Streuung im Medium, Sensorrauschen + - Echo statisch verteilt wegen Geschwindigkeitsprofil +- Ultraschall-Geschwindigkeitsmessung nach dem Dopplerverfahren + - $f_D=f\frac{c}{c-v} \Rightarrow v=c\frac{f-f_D}{f_D}$ + - $c$ - Ausbreitungsgeschwindigkeit des Ultraschalls im Medium + - $f$ - Originalfrequenz der Signalquelle + - $f_D$ - gemessene Frequenz (Beobachter) + - $v$ - Geschwindigkeit der Signalquelle + - ![](Assets/Biosignalverarbeitung-ultraschall-doppler.png) + - ![](Assets/Biosignalverarbeitung-ultraschall-doppler-2.png) + - Anm: Feste Blutbestandteile (Blutkörperchen) reflektieren die Schallwellen und sind somit für den Ultraschall-Empfänger bewegte Signalquellen +- signalanalytisch relevante Eigenschaften + - Flussgeschwindigkeit ungleichmäßig verteilt + - im technischen Bereich konstruktiv beherrschbar (Messkammer, Durchmesser, Material) + - im medizinischen Bereich kein Einfluss auf die Gefäße, daher relativ ungenaue Messung der mittleren Geschwindgkeit + +## Optische Sensoren +Optische und Strahlungsquellen +- Kaltlichtquelle: in der Endoskopie, bläuliches Tageslicht wegen der Farbtreue +- Diagnostische Laser: in der Ophthalmologie, Urologie, inneren Medizin, Dermatologie +- Leuchtdioden: in der Photoplethysomographie (Pulsoximetrie) +- Röntgen-, Gamma-, UV- und IR-Strahler: in der diagnostischen Bildgebung +- Inspektionslicht: in der HNO (Halogenstrahler) + +Signalanalytisch wichtige Eigenschafte +- Temperaturstrahler: sind träge, daher statisches, konstantes Licht +- Halbleiter (Leuchtdioden), Laser und Leuchtstoffröhren sind gepulste Quellen - mit dem Auge nicht wahrnehmbar, aber analytisch unter Umständen sehr problematisch + +Optische Sensoren +- Phototransistor: in Flachbilddetektoren der Radiologie +- Kamerachips: in den Endoskopen +- Szintillatoren: in Gamma-Kameras +- Photovervielfacher (SEV) in Laser-Fluroszenzsystemen + +Sensoreigenschaften +- starkes Eigenrauschen, typisch für Halbleiter, ,,Dunkelstrom'' +- hohe Temperaturabhängigkeit, ist materialbedingt, variable Parameter +- ungünstige Dynamikeigenschaften, Nachleuchten durch Trägheit, systemanalytisch lange Impulsantwort + +Beispiel Optischer Sensor CMOS Kamera LOGLUX i5 +- wahlfreier Pixelzugriff +- CameraLink oder FireWire Datenschnittstelle +- Auflösung 1280x1024 Pixel, 10 bit Graustufen +- $>100$ dB Kontrast-/Dynamikumfang +- ca 36 fps bei Vollbild; höhere Bildrate bei kleinerem Bildfeld bis ca 1500 fps +- Vorverarbeitung der Bilddaten mittels integrierter LUT (look-up-tables) möglich +- spektraler Arbeitsbereich 400-1000nm + +Optische Messmethoden gewinnen in der Medizin immer mehr an Bedeutung, vor allem, weil sie nichtinvasiv sind und daher patientenfreundlich. Mit der Kombination von Spektralfotometrie und Photoplethysmografie kann die Sauerstoffsättigung bestimmt werden. Dazu ist es notwendig, Gewebe durchzustrahlen, welches mit arteriellem Blut versorgt wird. Sehr verbreiten ist die Transmissionsmessung -d.h., das Gewebe wird durchstrahlt, was den Anforderungen an eine Messanordnung entsprechend der Theorie noch am nächsten kommt. Eine Alternative wurde notwendig, da der Finger u.U. nicht versorgt wird, z.B. beim Schock: Die Reflexionsmessung, bei der das Licht über einem Flächenknochen eingestrahlt und das reflektierte erfasst wird. +- ![](Assets/Biosignalverarbeitung-pulsoxy-1.png) +- ![](Assets/Biosignalverarbeitung-pulsoxy-2.png) +- ![](Assets/Biosignalverarbeitung-pulsoxy-3.png) + +Signal am Photodetektor +- Multiplex bzw. sequentielle Abtastung +- Rauschen (Optoelektronik) +- Umgebungslicht, insbesondere Leuchtstoffröhren +- ![](Assets/Biosignalverarbeitung-pulsoxy-4.png) + +Signal am Demultiplexer +- DC ca 95-98% +- AC nach DC Subtraktion verstärkt +- ![](Assets/Biosignalverarbeitung-pulsoxy-5.png) + +Für die Signalverarbeitung bedeutet die Analyse des empfangenen Signals eine komplexe Herausforderung: Die Störungen, das Rauschen und das Umgebungslicht (vor allem im OP), sind enorm stark, so dass ihre Trennung vom Signal schwierig ist. Hinzu kommt, dass das Nutzsignal im unteren Prozentbereich des gesamten empfangenen Signals liegt, so dass hier das SNR um weitere zwei Dekaden schlechter wird. + +An diesem Beispiel eines realen Pulsoximetriesignals kann man die realen Eigenschaften erkennen: +- ![](Assets/Biosignalverarbeitung-pulsoxy-6.png) + - Der DC-Anteil, der im Grunde durch eine Tiefpassfilterung gewonnen wird, ist real ein stark schwankender gleitender Mittelwert (unterer Verlauf). + - Der AC-Anteil (oberer Verlauf) zeigt ebenfalls starke Schwankungen. Um dem Mediziner einen einigermaßen stabilen Messwert zu bieten, sind mehrere Schritte der SV notwendig +- ![](Assets/Biosignalverarbeitung-pulsoxy-7.png) + - Pulsbreite 1ms, analoger Tiefpass 10kHz, Abtastrate 10 ksps + - Zunächst müssen aus dem Multiplexsignal die aktuellen Signalpegel für das rote und infrarote Licht sowie für das Umgebungslicht gewonnen werden: Durch die 10fache Überabtastung stehen für Rot und Infrarot zunächst elf Messwerte zur Verfügung. Dieser Umfang an Messdaten ist für eine Pegelbestimmung mit dem Mittelwert zu gering, daher wird der Median verwendet. Nach der Medianbildung liegen die Signalpegel für weitere Berechnung vor. +- ![](Assets/Biosignalverarbeitung-pulsoxy-8.png) + - Die gewonnenen Signalpegel werden nun einer Signalanalyse unterzogen. Die Analyse bei einer Wellenlänge ist ausreichend, da die Signalform bei allen qualitativ identisch ist. Für die Bestimmung des AC-Pegels werden die Extrema detektiert. Aus der Physiologie ist bekannt, dass die Anstiegszeit der Pulswelle höchstens 30% der Gesamtzeit beträgt, so dass eine Prüfung im Zeitfenster folgt. Weiterhin ist der Bereich der Periode bekannt, diese Prüfung folgt im nächsten Schritt. Durch Artefakte, vor allem durch Bewegung, entstehen Schwankungen der Basislinie. Nach einem empirische ermittelten Kriterium wird ein Trend von bis zu 30% vor der Berechnung akzeptiert. + +## Akustische Sensoren +Physiologischer Schall (Herztöne, Atmungsapparat) liegt im hörbaren Bereich, so dass hier Methoden eingesetzt werden, die aus der allgemeinen Akustik bekannt sind. +Konventionelle Mikrophontechnik mit spezifischer Signalverarbeitung +- Verstärkung im tieffrequenten Bereich mit linearer Phase +- Richtcharakteristik umschaltbar bzw einstellbar, mechanisch bereits in den ältesten Stetoskopen +- spektrale Filterung für typische Geräusche, wie Herzklappen, Pfeifen in der Lunge, etc +- Merkmalserkennung in computerbasierter Auswertung, Mustererkennung typischer pathologisch bedingter Geräusche + +Beim Ultraschall (CW,PW,Doppler) handelt es sich um mechanische Schwingungen bis in den zweistelligen Megahertzbereich ( ca. 30MHz). Hier müssen aufwendige Methoden der SV angewandt und entwickelt werden, die primär -d.h. bis zum Übergang in den physiologischen Bereich bzw. zur Bildgebung -eher in der Nachrichtentechnik und Stochastik ihren Ursprung haben: Signaldetektion, Korrelationsrechnung, Histogramme, Signalzerlegung. +Signalanalytisch wichtige Eigenschaften: +- bei CW (Continous Wave) keine Tiefeninformation verfügbar, Information über Dopplerfrequenz mit hoher Variationsbreite, stochastischer Charakter mit viel Rauschen +- bei PW (pulsed Wave) Auflösung von der Signalverarbeitung entscheidend abhängig, da physikalische Grenzen lange erreicht +- in der Doppler-Technologie beides (CW und PW) vereint, daher Summe aller Vor- und Nachteile + +## Sensoren für elektrische Größen +### Elektrochemische Grundlagen +- Dieser Sensortyp dient der Erfassung der elektrischen Aktivität des Menschen +- Der Mensch produziert elektrische Signale, daher ist keine Umwandung der Energieform notwendig +- Der Mensch ist elektrisch gesehen ein Volumentleiter der 2. Art - ein Elektrolyt oder ein Ionenleiter +- Das Messsystem ist mit metallischen Leitern aufgebaut - Leiter der 1. Art, Elektronenleiter +- daher ist die Schaffung einer Schnittstelle notwendig - die Elektrode +- ![](Assets/Biosignalverarbeitung-elektrochemische-grundlage.png) + - $mM \Leftrightarrow mM^+ + me^-$ + - $K_k A_a\Leftrightarrow kK^+ + aA^-$ + - $\leftarrow$: Reduktion; $\rightarrow$: Oxidation + - Dynamisches Gleichgewicht an den Phasengrenzen + - An der Phasengrenze der beiden Leitertypen entwickelt sich -ähnlich wie in einem Halbleiter -eine Raumladungszone. Die freien Elektronen im Metall und die Kationen des Elektrolyts ziehen sich an und bilden an der Grenze eine Doppelschicht. Je nach der chemischen Zusammensetzung des Elektrolyts und des Metalls finden unterschiedlich starke chemische Reaktionen statt, die beim dynamischen Gleichgewicht die sog. Elektrodenspannung bilden. Funktionell handelt es sich hierbei also um ein ungewolltes Voltaisches Element. + +### Elektroden der Diagnostik +- aus signalanalytischer Sicht Eingangsdaten +- aus messtechnischer Sicht Systemeingang + +| Ziele | Realisierbarkeit | +| ------------------------------------- | ----------------------------------------------- | +| geringe Elektrodenspannung | durch Materialwahl (AgAgCl) | +| geringer Drift der Elektrodenspannung | physiologisch bedingt, daher kaum beeinflussbar | +| geringes Eigenrauschen | Materialwahl und Technologie | + +Aus signalanalytischer Sicht sind die Ziele ganz klar vorgegeben. In der Praxis muss jedoch immer ein Kompromiss zwischen diesen Zielen und den Anforderungen der Anwendung und Praktikabilität gefunden werden: Wie diese Beispiele zeigen, hängt die Konstruktion der Elektrode von ihrer Bestimmung ab und daraus ergeben sich auch die Signaleigenschaften. So z.B. muss eine subkutane EMG-Elektrode die Form eine Nadel haben und aus einem Edelmetall sein. Dies hat zur Folge, dass die EMG-Elektroden relativ schlechte Signaleigenschaften aufweist: Riesige Elektrodenimpedanz (bis einige MOhm), stark kapazitives Verhalten, sehr hohe Elektrodenspannung (bis in den Voltbereich). Im Vergleich dazu haben die EKG-Elektroden -vor allem auf Grund ihrer großen Fläche und des Materials (AgAgCl, NaCl) -sehr günstige Eigenschaften: Niedrige Elektrodenimpedanz (kOhm-Bereich), sehr tieffrequent (bis DC), niedrige Elektrodenspannung (um 100 mV). + +![](Assets/Biosignalverarbeitung-elektroden.png) + +### Elektroden der Therapie +- aus signalanalytischer Sicht Ausgangsdaten +- aus messtechnischer Sicht Systemausgang + +| Ziele | Realisierbarkeit | +| --------------------------- | ----------------------------------- | +| geringe Impedanz | durch Materialwahl (beschichtet Cu) | +| geringer Drift der Impedanz | physiologisch bedingt | +| Langzeitstabilität | Materialwahl und Technologie | + +Ebensowichtig wie die Eigenschaften der diagnostischen Elektroden, sind es auch die der therapeutischen Elektroden. Dies liegt darin begründet, dass die Therapie von den zuvor analysierten diagnostischen Daten abhängt -natürlich im signalanalytischen Sinne, denn medizinisch ist es immer so. Man muss sich also bei der gewählten Therapie darauf verlassen können, dass das, was man auf die Elektrode schickt, so auch am biologischen Objekt ankommt. Diese Forderung technologisch umzusetzen ist ungleich leichter als bei diagnostischen Elektroden, denn hier können relative große Flächen mit gutem Kontaktmaterial verwendet werden. + +![](Assets/Biosignalverarbeitung-elektrode-therapie.png) + +## Sensoren für magnetische Größen +### Messprinzipien +Um einen Eindruck über die Signalstärke (eher Signalschwäche) der biomagnetischen Signale zu bekommen, wird mit dem natürlichen Erdfeld verglichen, obwohl dieses für den Biomagnetismus eigentlich gar kein Problem darstellt. Störend sind die vom Menschen gemachten magnetischen Felder, vor allem die vom Stromversorgungsnetz, die jedoch weit über dem magnetischen Erdfeld liegen. +1. Das stärkste Biosignal, das MKG, liegt 6 Dekaden unter dem Erdfeld (120dB), und weitere 2...3 Dekaden unter den technischen Feldern. +2. MEG -7 Dekaden, oder 140dB, +3. evozierte Felder -8 Dekaden oder 160dB + +- $10^0T$: MR-Tomographie-Magnete +- $10^{-5}T$: Erdfeld +- $10^{-6}T$: Zivilisationsfelder (Rauschen) +- $10^{-9}T$: magn. Kontamination der Lunge +- $10^{-10}T$: Magnetkardiogramm +- $10^{-12}T$: Magnetoenzephalogramm +- $10^{-13}T$: evozierte kortikale Aktivität +- $10^{-15}T$: SQUID System Rauschen + +Biomagnetische Signale sind sehr schwach (SNR< -120dB). Mehrere Maßnahmen zur SNR-Anhebung notwendig +- Abschirmung des Messkreises gegen Störfelder (dickwandige Kammer aus $\mu$-Metallen) +- Ausnutzung der Feldeigenschaften - Gradiometer +- Spezialtechnologie der Signalverstärker - SQUID + +### Gradiometer +Prinzip: +- Störfelder meist ferne Quellen, Biologische Strukuren nahe Quellen +- ferne Quellen produzieren annährend homogenes Feld +- nahe Quellen Produzieren inhomogenes Feld +- mit Gradiometer wird die erste bzw zweite räumliche Ableitung gebildet, dadurch wird homogenes Störfeld unterdrückt +- ![](Assets/Biosignalverarbeitung-Gradiometer.png) +- ![](Assets/Biosignalverarbeitung-gradiometer-2.png) +- homogenes Fernfeld (Störung, blau): $u=u_2-u_1=0$ +- inhomogenes Nahfeld (Biosignalquelle, rot): $u=u_2-u_1<>0$ + +### SQUID +![](Assets/Biosignalverarbeitung-squid.png) + +Das supraleitende Quanteninterferenzgerät (SQUID) besteht aus zwei Supraleitern, die durch dünne Isolierschichten getrennt sind und zwei parallele Josephson-Kontakte bilden. Das Gerät kann als Magnetometer konfiguriert werden, um unglaublich kleine Magnetfelder zu erkennen - klein genug, um die Magnetfelder in lebenden Organismen zu messen. SQUID wurden zur Messung der Magnetfelder in Mäusehirnen verwendet, um zu testen, ob ihr Magnetismus ausreicht, um ihre Navigationsfähigkeit auf einen inneren Kompass zurückzuführen. [Quelle](http://hyperphysics.phy-astr.gsu.edu/hbase/Solids/Squid.html) + +# Verstärkung und analoge Filterung +## Eigenschaften von Biosignalen und Störungen + +### Entstehung der Biosignale, biologische Signalquellen +- Analysegegenstand: Sensorisches, motorisches und zentrales Nervensystem +- Grundbaustein: Nervenzelle, Neuron. Einzelne Neurone kaum untersuchbar, im Einzelfall mit Mikroelektroden, dennoch für die Gesamtheit wenig Bedeutung. Wichtiger sind Untersuchungen an Neuronenverbänden und -strängen, z.B. motorische Steuerung von Muskeln in den Extremitäten. Hier haben die Nerven überschaubare und anatomisch sowie elektrophysiologisch gut bekannte Struktur. +- am Neuronausgang - Axon: Aktionspotentiale +- am Neuroneingang - Synapsen: EPSP/IPSP (exzitatorische und inhibitorische postsynaptische Potentiale) + +- Sensorisches System ist deutlich komplexer, vor allem das akustische und das visuelle. So hat die Retina allein mehrere Millionen Sensoren (Stäbchen und Zapfen), die mit Ganglienzellen verbunden sind und bereits vor Ort relativ einfache Informationsverarbeitung durchführen. +- Zahlenmäßig und daher in auch in seiner Komplexität ist das größte das zentrale Nervensystem (ZNS), das aus ca. 10 Milliarden Neuronen besteht, die funktionelle und anatomische Zentren bilden aber zeitlich stark variierende Eigenschaften aufweisen. +- Signalanalytisch ist das Grundelement das Aktionspotential (AP), das vom Neuron nach Erreichen der Reizschwelle an seinen Eingängen über das Axon nach außen bzw. an andere Neurone abgegeben wird. Die Synapsen empfangen die Aktionspotentiale von anderen Neuronen und bewerten diese je nach Zustand mit EPSP oder IPSP, die von sich aus starken Veränderungen unterliegen. Im EEG sind die AP deutlich unterrepräsentiert (nur etwa 10% des EEG), wesentlicher Anteil bilden die PSP. Dies ist unter anderem durch den Tiefpasscharakter des Schädels bedingt, das die hochfrequenten AP unterdrückt. + +![](Assets/Biosignalverarbeitung-ekg.png) + +Ein medizinisch und auch signalanalytisch besonders interessantes Signal ist das EKG: Medizinische Indikation ergibt sich allein aus der besonderen Stellung des Herzens in der Physiologie als des Motors des Kreislaufs. Signalanalytisch ist es deswegen interessant, da es unter reproduzierbaren Messbedingungen (Extremitätenableitungen) formkonstanten Signalverlauf zeigt. Das EKG wurde entsprechend seiner elektromedizinischen Bedeutung extensiv untersucht, zahlreiche Erkrankungen und Schäden werden anhand typischer Formveränderungen des EKG diagnostiziert. Die Signalquelle des EKG ist das räumlich zwar recht komplizierte, aber anatomisch qualitativ konstante Reizleitungssystem des Herzens. Zur Ableitung des EKG werden standardmäßig 3-, 6-oder 12-kanalige Extremitäten-und Brustwandsysteme verwendet. + +![](Assets/Biosignalverarbeitung-herz-ekg.png) + +Projektion der Reizausbreitung auf einen längs zur Herzachse liegenden Vektor (vertikal): Zu beachten ist, dass durch die Differenzbildung an zwei Punkten an der Körperoberfläche damit mathematisch die erste räumliche Ableitung (oder auch der erste Gradient) gebildet wird. Das hat zur Folge, dass die Ableitung nicht nur in Phasen der Ruhe (vor der P-Welle), sondern auch bei maximaler Erregung ( PQ-und ST-Strecke) Null ist. Wellen und Zacken im EKG sind Ausdruck der räumlich-zeitlichen Veränderung im Reizleitungssystem. + +![](Assets/Biosignalverarbeitung-gehirn.png) +![](Assets/Biosignalverarbeitung-gehirn-ekg.png) + +Zur Ableitung des EEG werden wie beim EKG standardisierte Elektrodensysteme verwendet. Allerdings ist die anatomische Zuordnung hier ungleich schwieriger, denn die einzigen einigermaßen stabilen anatomischen Bezugspunkte sind das Nasion und das Inion. Es ist jedoch bekannt, dass die Lage des Gehirns in Bezug auf diese Punkte individuell stark unterschiedlich ist und im Zentimeterbereich liegt, so dass eine genaue Zuordnung der Elektroden zu Funktionszentren gar nicht möglich ist. Die Dichte der Elektroden in der Praxis liegt höchstens bei 10% NI, d.h. im Schnit bei etwa 3cm. Eine höhere Dichte bringt keine zusätzliche Information, da der Schädel als räumlicher Tiefpass funktioniert und keine höhere Auflösung erlaubt. + +Aus Sicht der Signalanalyse ist es besonders wichtig zu wissen, unter welchen Messbedingungen das EEG abgeleitet wurde. Im Idealfall wird unipolar gegen verbundene Ohren oder Hals abgeleitet. Aus unipolaren Daten lassen sich die bipolaren Ableitungen einfach berechnen, umgekehrt geht das jedoch nicht. Auf jeden Fall ist zu klären, wie die Verschaltung des EEG-Verstärkers und der Elektroden realisiert wurde. Vermeintlich elegante Tricks, wie hardwaremäßige CAR sind auf jeden Fall zu meiden, ebenso Antialiasingfilter mit nichtlinearer Phase. + +![](Assets/Biosignalverarbeitung-gehirn-eeg.png) + +Das EEG wird in in fünf typische Bereiche unterteilt: delta (0..4Hz), theta (4-7Hz), alpha (8..13Hz), beta (13..30Hz), gamma (>30Hz). Diese Bereiche sind typisch für bestimmte physiologischen (Schlaf, Konzentration, Entspannung) und pathologischen Bilder. Für die Signalanalyse ist wichtig, dass die Bereiche nicht gleichzeitig vorhanden sind, einer ist immer dominant, was die Analyse leicht vereinfacht. + + +### Biologische und technische Störquellen +| periodische | transiente | +| --------------------------------- | ------------------------- | +| öffentliches Stromversorgungsnetz | Spannungsspitzen im Netz | +| Straßenbahn | Bewegungen im Messbereich | +| Monitore | Schaltvorgänge | +| Kommunikationsnetze | Lastschwankungen | +| Rotierende Maschinen | +| Sender inkl. Funktelefon | + +1.Das biomedizinische Messsystem ist von vielen Störquellen umgeben, die meisten sind dem Bereich der Medienversorgung, Industrie, Verkehr und Nachrichtentechnik zuzuschreiben. Für die BSA sind periodische (Versorgungsnetz, Monitore) und quasiperiodische (rotierende Maschinen, Straßenbahn) Störungen noch ein vergleichsweise geringes Problem, denn diese lassen sich gezielt mit spektralen Filtern in der analogen Messkette oder digital nach ADC unterdrücken. +2.Wesentlich schwieriger ist die Situation, wenn transiente Störungen vorliegen, denn diese haben im Allgemeinen einen unbekannten, einmaligen und daher nicht reproduzierbaren Verlauf. Solange die transiente Störung die Signalerfassung nicht beeinträchtigt (durch Übersteuerung des Messverstärkers) und deutlich von der Signalform abweicht (z.B. Ausgleichsvorgang mi EKG), kann sie mit relativ einfachen Mitteln beseitigt werden, dennoch im Allgemeinen ist dies kaum möglich. + +![digitale Bandsperre für die Netzfrequenz](Assets/Biosignalverarbeitung-netzfrequenz-bandsperre.png) +Die häufigste -weil immer vorhanden- ist die Netzstörung. Selbst batteriebetriebene portable Messgeräte sind von dieser Störung betroffen. Da die Frequenz der Störung aber bekannt ist, kann sie -falls keine Übersteuerung vorliegt- mit einer Bandsperre reduziert werden. Allerdings sollte nicht die früher übliche ,,50 Hz -Filter'' Taste verwendet werden, denn diese Filter haben einen nichtlinearen Phasenfrequenzgang und können das Biosignal deutlich verfälschen. Bei der heutigen Technologie werden ausschließlich digitale Filter verwendet. + +![Trendelimination (Hochpassfilterung)](Assets/Biosignalverarbeitung-trendelimination.png) +Eine sehr häufige transiente Störung im medizinischen Bereich ist die Bewegungsartefakte. Jegliche Bewegung im Messbereich erzeugt in der empfindlichen medizinischen Messtechnik Ausgleichsvorgänge. Wenn die Signalform gut bekannt ist, wie z.B. beim EKG, so lässt sich eine langsame Artefakte durch Hochpassfilterung beseitigen. +- Maximal $f_{0,01}=0,5 Hz$ Patienten-Monitor EKG (nicht oberhalb) +- Maximal $f_{0,02}=0,05Hz$ Diagnostischer Monitor bei EKG (nicht oberhalb) + +Ob ein Biosignal gewollt ist oder eine Störung darstellt, ist von der Messaufgabe abhängig: +- soll das EKG gemessen werden, ist das EMG eine Störung +- soll das EEG gemessen werden, ist das EKG eine Störung +- soll das EOG gemessen werden, ist das EEG eine Störung + +Prinzipielles Problem: Biologische Störquellen lassen sich nicht abschalten und kaum unterdrücken + +Aus Sicht der BSA gestaltet sich das Problem der Störungen wesentlich schwieriger als bei technischen Störungen. Erstens, die Biosignalquellen befinden sich innerhalb des Körpers, daher können sie weder abgeschirmt noch abgeschaltet werden. Zweitens, das biologische Signalspektrum ist für alle Biosignale in etwa gleich, streckt sich von 0 bis etwa 1kHz aus und weist ein Maximum bei etwa 100Hz auf. Daher können biologische Störsignale mit spektralen Filtern allein nicht beseitigt werden. + +Ein weiteres -messmethodisches -Problem besteh darin, dass man Biosignale nicht pauschal in Nutz-und Störsignale trennen kann. Es ist vielmehr die Messaufgabe, an Hand der man diese Klassifikation vornehmen muss. + +#### Eigenschaften technischer Störungen +| periodische Störungen | transiente Störungen | +| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------- | +| NF-magnetische Felder nicht eliminierbar durch Schirmung, erzeugen Differenzspannung | kaum eliminierbar, da Signalform unbekannt und nicht reproduzierbar | +| NF-elektrische Felder gut beherrschbar, erzeugen Gleichtaktstörungen | bestenfalls Detektion möglich, Messdaten nicht korrigierbar | +| HF-Felder immer mehr vorhanden (Kommunikationsnetze), Abschirmung unwirtschaftlich | + +1. Naturgemäß erzeugen niederfrequente magnetische Felder am Verstärkereingang Differenzspannungen, die direkt mit dem Biosignal überlagert werden, so dass sie mit der üblichen Verstäkertechnik nicht reduziert werden können. Hinzu kommt, dass auch eine Abschirmung nicht viel bringt, da in diesem Frequenzbereich mehrere 10- Zentimeter dicke Eisenplatten verwendet werden müssten, was in der Praxis nicht realisierbar ist. Da die niederfrequenten elektrischen (kapazitiv eingekoppelten) Störfelder Gleichtaktsignale sind, können sie zum Teil gut durch die Differenzverstärkertechnik reduziert werden. In immer höheren Maße stören hochfrequente Felder, vor allem aus dem Mobilfunk, Datennetzen, WLAN, Bluetooth, etc. Eine Abschirmung ist im normalen Praxisbetrieb unwirtschaftlich, so dass eine Reduktion der Störung allein durch Maßnahmen der EMV zu erreichen ist. +2. Wie schon erwähnt, transiente Störungen sind im Grunde nicht beherrschbar, da sie eigentlich nicht bekannt und nicht vorhersehbar sind. Mit Methoden der BSA ist zum Teil ihre Detektion möglich, wenn z.B. der Messbereich oder das Spektrum des Biosignals nachweislich verlassen wird. Diese Detektion kann allerdings nur dazu genutzt werden, die beeinträchtigten Daten zu verwerfen, eine Korrektur ist nicht möglich. + + +#### Eigenschaften biologischer Störungen +- Spektral alle Biosignale im selben Band (0...100Hz) +- Nichtlineare Verkopplung der Biosignale verhindern Trennung mit herkömmlichen Methoden +- Kein Biosignal deterministisch und reproduzierbar +- Transiente bzw apperiodische und instationäre Biosignale nicht qualifizierbar +- Eine Trennung kaum möglich, bestenfalls eine Reduktion (z.B. Abschwächung des EMG im EKG) + +Das größte Problem bei der Reduktion von biologischen Störsignalen ist ihre funktionelle Verkopplung und physikalische Überlagerung im Volumenleiter Mensch. Die funktionelle Verkopplung (z.B. Einfluss der Atmung auf die Herzrate) ist nicht abschaltbar, ist nichtlinear und qualitativ unbekannt bzw. mit Methoden der BSA nicht beschreibbar. Außerdem sind die Verkopplungen in ihrer Komplexität weitgehend unerforscht und höchstens in Ansätzen dokumentiert. + +Man kann im Einzelfall den Einfluss eines Biosignals auf ein anderes zum Teil reduzieren. So z.B. ist bekannt, dass das EMG ein breitbandiges und vor allem hochfrequentes Signals ist, während das EKG seine Hauptanteile eher im niederfrequenten Bereich besitzt. Daher kann man den Einfluss des EMG mit einem relativ einfachen Tiefpass reduzieren, allerdings auch auf Kosten der Beeinträchtigung des EKG. + + +## Medizinische Messverstärker +### Dynamik, Linearität +Messverstärker Anforderungen: +- Linearität im Arbeitsbereich +- Linearer Phasenfrequenzgang +- Geringes Eigenrauschen +- Hohe Gleichtaktunterdrückung +- Übersteuerungsfestigkeit + +1. Mit Linearität im Arbeitsbereich ist die statische Linearität des Verstärkers gemeint, also die statische Beziehung zwischen der Ausgans-zu der Eingangsspannung $U_a/U_e$. +2. Mit linearem Phasengang ist die dynamische Linearität gemeint, also die Erhaltung der Signalform bei der Verstärkung. Beim nichtlinearen Phasengang wird die Veränderung der Signalform fälschlicherweise auch als ,,lineare Verzerrung'' bezeichnet, wohl in Anlehnung an die nichtlinearen Verzerrungen im Arbeitsbereich. +3. Das Eigenrauschen des Messverstärkers ist ein sehr wichtiger Parameter vor allem in der medizinischen Messtechnik, denn das Rauschen liegt im Bereich der zu messenden Signale im unteren Mikrovoltbereich. Ausgerechnet das 1/f-Halbleiterrauschen liegt dort, wo die Biosignale ihren wesentlichen Spektralanteil aufweisen. +4. Wie schon erwähnt, ein wesentlicher Teil der beherrschbaren technischen Störungen bilden die Gleichtaktsignale. Daher wird von den Messverstärkern eine hohe CMRR gefordert, die nicht unter 100dB liegen sollte. +5. Die Empfindlichkeit eines Verstärkers allein ist noch kein hinreichendes Kriterium. Ein medizinischer Verstärker muss übersteuerungsfest sein, damit er nicht schon beim ersten Defibrilationsimpuls oder bei der ersten OP mit HF-Gerät seine Dienste aufgibt. Und dies zu gewährleisten ist für die Elektroniker eine echte Herausforderung: Es gilt nämlich das Ziel, einen Verstärker aufzubauen, der im Mikrovoltbereich arbeitet, dennoch bei Spannungen von mehreren 100V (Defibrilation) oder HF-Leistungen (um 100W) nicht beschädigt wird und zeitnah seinen Arbeitsbereich wiederfindet. + +![](Assets/Biosignalverarbeitung-Linearität-arbeitsbereich.png) + +Die Pegel der Biosignale sind gut bekannt, so dass den Arbeitsbereich des Verstärkers vorzugeben, kein Problem darstellt. So wird dieser Bereich für das EKG etwa zwischen - 5 und +5 mV liegen. Als Reserve bis zur Begrenzung sollte man mindestens 50% des Arbeitsbereiches vorsehen. + +### Eigenrauschen +![](Assets/Biosignalverarbeitung-eigenrauschen.png) + +Das Halbleiterrauschen (1/f) erreicht bei etwa 10Hz den Pegel des weißen (Widerstands-) Rauschens. Da aber in diesem Bereich die meiste Energie der Biosignale liegt, ist es beim Schaltungsentwurf wichtiger, geeignete Halbleiter auszusuchen als sich auf die Minimierung des Widerstandsrauschens zu beschränken. Da die Auswahl an guten Halbleitern sehr begrenzt ist und dadurch den Entwicklern deutliche technologische Grenzen gesetzt sind, versuchen einige Konstrukteure und Hersteller die Eigenschaften ihrer Technik dadurch zu beschönigen, dass sie das Spektrum nach unten durch einen Hochpass begrenzen und erst dann die Rauschspannung messen und angeben. Daher muss man bei den Vergleichen verschiedener Techniken an dieser Stelle sehr vorsichtig vorgehen. Beispielsweise ist ein Verstärker, der angeblich nur 2uV Rauschspannung erzeugt aber erst bei 1Hz beginnt sicher nicht besser, als einer mit 3uV Rauschspannung dafür aber bereits ab 0.1Hz verstärkt. + +### Frequenzgang +Linearer Phasenfrequenzgang: Keine Formverzerrung +- Gruppenlaufzeit: $d(f)=const.$ +- Phasenfrequenzgang: $\phi(f)=\int + +Die wichtigste Eigenschaft der Biosignale, die von Medizinern diagnostisch genutzt wird, ist ihre Signalform. Daher lautet eine der grundlegenden Anforderungen an die Messtechnik und die BSA, dass die Signalform nicht verfälscht werden darf. Das bedeutet, dass sowohl im analogen als auch im digitalen Teil des Messsystems die Gruppenlaufzeit konstant sein muss. Daraus lässt sich die Forderung herleiten, dass der Phasengang linear sein muss, zumindest im Übertragungsbereich. + +## Differenzverstärker +### Funktionsprinzip +Vollkommene Symmetrie (DV und Signalanbindung) +- ![](Assets/Biosignalverarbeitung-Differenzverstärker-funktion.png) +- Vg ist Quelle der massebezogenen Störung. Die Störspannung gelangt auf beide Eingänge über Streukapazitäten, deren Impedanzen mit R4 und R5 simuliert werden, in gleicher Phase und im Idealfall auch mit gleichem Pegel. Die Störsignale an den Eingängen U10 und U20 sind also gleich, werden daher als Gleichtaktsignale bezeichnet. +- Vd ist die gewünschte massefreie Spannung (aus Sicht der Signalquelle zählen R4 und R5 nicht als Masseverbindung, die ,,hängt in der Luft'', floating source). Die Signalquelle Vd liegt direkt zwischen den Eingängen an, erzeugt daher eine Differenzspannung (siehe Funktionsprinzip eines Differenzverstärkers: Durch die Verkopplung der beiden Zweige T1 und T2 hat eine Zunahme der Eingangsspannung U10 Abnahme von Ud1 und Zunahme von Ud2, analog gilt das für U20. Daher liegt zwischen Ud1 und Ud2 die verstärkte Differenz von U10 und U20 an). +- Betrachtet man Ud1 und Ud2 massebezogen, so liegen überlagerte Gleichtakt- und Differenzspannungen an (unterer Grafik). Betrachtet man die verstärkte Spannung massefrei (also als Differenz zwischen Ud1 und Ud2), so verschwindet durch die Differenzbildung die Gleichtaktstörung und die gewünschte Differenzspannung bleibt übrig. +- Alle bisherigen Erläuterungen gelten nur im Idealfall: Sowohl der Verstärker ist ideal symmetrisch (identische Transistoren und Widerstände), als auch die Einkopplung der Gleichtaktstörung erfolgt ideal symmetrisch (über R4 und R5). + +Symmetrie im DV, asymmetrische (realistische) Signalanbindung +- ![](Assets/Biosignalverarbeitung-Differenzverstärker-asymmetrisch.png) +- In der Realität lassen sich zwar Verstärker bauen, die an das Ideal gut herankommen. +- Die Einkopplung der Gleichtaktstörung ist jedoch immer unsymmetrisch, es ist unmöglich, im Messkreis Symmetrie herzustellen (R4 und R5 unterschiedlich). Daher wird aus der ihrem Wesen nach Gleichtaktstörung zum Teil eine Differenzstörung. Und die Differenzstörung erscheint in der Ausgangsspannung Ud1-Ud2 zwangsläufig auch. +- Das heißt, in der Realität wird der Gleichtaktanteil der Störung zwar unterdrückt, aber der zur Differenz gewordene Anteil bleibt am Ausgang bestehen. + + +### Differenz- und Gleichtaktverhalten +![](Assets/Biosignalverarbeitung-Diff-und-Gleichtakt.png) +- $SNR_{in} = \frac{U_{d\_in}}{U_{g\_in}}=\frac{1mV}{10V}=10^{-4}\approx -80dB$ +- $V_g$: Gleichtaktstörung (Netz) +- $V_d$: Nutzsignal (EKG) +- Heute werden Differenzverstärker meistens als integrierte analoge Schaltungen mit OPVs eingesetzt. Da der Ausgang massefrei ist, folgt eine zweite Stufe zur Differenzbildung (IC3), die am Ausgang eine -wie üblich -massebezogene Spannung liefert. Diese Anordnung wird als Instrumentationsverstärker bezeichnet (instrumenation amplifier) und ist auch integriert verfügbar. +- Am Eingang liegt eine realistische Situation vor: Das gewünschte Signal hat den Pegel von 1mV (EKG), die Netzstörung erreicht (auch mehr als) 10V. Daher ist der SNR am Eingang sehr niedrig, -80dB. +- ![](Assets/Biosignalverarbeitung-Diff-und-Gleichtakt2.png) +- $CMRR=\frac{U_{d\_out}}{U_{g\_out}}*\frac{U_{g\_in}}{U_{d\_in}}=\frac{200mV}{20mV} *\frac{10V}{1mV}=10^5\approx 100dB$ +- Führt man mit dem Ausgangssignal des Verstärkers Spektralanalyse durch, so stellt man fest, dass die Netzstörung am Ausgang 20mV beträgt, während das gewünschte Signal 200mV erreicht, also der SNR am Ausgang ist 10 bzw. 20dB. Da der SNR am Eingang - 80dB betrug, wurde eine SNR-Verbesserung von 100dB erreicht. Diese Verbesserung ist auf die Gleichtaktunterdrückung selbst bei Asymmetrie am Eingang zurückzuführen, so dass in diesem Fall das CMRR identisch der SNR-Verbesserung ist. (Common-Mode Rejection Ratio, Gleichtaktunterdrückung, muss in der Medizintechnik laut Katalog mindestens 100dB, besser 120dB erreichen). + +## Instrumentationsverstärker +Der Instrumentationsverstärker (IV) ist ein mehrstufiger Verstärker, von dem in der medizinischen Messtechnik ein hoher Eingangswiderstand (besser als 100MOhm) und eine hohe CMRR (besser 100dB) gefordert wird. + +### Mehrstufiger Verstärker +- ![](Assets/Biosignalverarbeitung-mehrstufiger-verstärker.png) +- Die erste Stufe ist der Eingangs-Differenzverstärker mit massefreiem Ausgang; die Ausgangsspannung ergibt sich aus der Differenz der Ausgangsspannungen von IC1 und IC2. Die zweite Stufe verstärkt zusätzlich und bezieht die verstärkte Spannung auf Masse, so dass am Ausgang massebezogene, verstärkte Eingangsdifferenz vorliegt. +- V1: $u_{ad}=A*u_{ed}+B*u_{eg}$, $u_{ag}=C*u_{eg}+D+u_{ed}$, + - $A/B=F$: Diskriminationsfaktor + - $A/C=H$: Rejektionsfaktor +- V2: + - $u_a=V_d u_{ed}+\frac{V_d}{CMR}u_{eg}=V_d(A u_{ed}+\frac{A}{F} u_{eg})+\frac{V_d}{CMR}\frac{A}{H} u_{eg}$ + - $u_a|_{u_{ed}=0} = V_d A(\frac{1}{F}+\frac{1}{CMR*H}) u_{eg}$ + - die gesamt-Gleichtaktunterdrückung eines mehrstufigen Verstärkers ist abhängig im Wesentlichen von der ersten (Eingangs-) Stufe +- Berechnet man die Ausgangsspannung in Abhängigkeit von der Eingangs-Gleichtaktspannung und von den Verstärkerparametern, so zeigt sich, dass für den CMRR die erste Stufe (wie auch bei anderen Parametern, z.B. Eigenrauschen) entscheidend ist, die folgenden Stufen sind unwesentlich beteiligt. Daher wird in der ersten Stufe der höchste Entwicklungsaufwand getrieben. + +### Hoher Eingangswiderstand +- ![](Assets/Biosignalverarbeitung-hoher-eingangswiderstand.png) +- $R^{(1)}_{ed}=2R_D+R_C\approx 2R_D$ +- $R^{(2)}_{ed}=R_1+R_3< 0$. Definiere $Pr_B:P(\Omega)\rightarrow[0,1],A \rightarrow\frac{Pr(A\cap B)}{Pr(B)}$. +Dann ist $(\Omega,Pr_B)$ selbst ein Wahrscheinlichkeitsraum, wie man leicht nachrechnet. Intuitiv ist $Pr_B(A)$ die Wahrscheinlichkeit für das Eintreten von $A$, wenn schon bekannt ist, dass $B$ eingetreten ist. Daher nennt man $Pr_B$ die bedingte Wahrscheinlichkeit bzgl. B und schreibt für $Pr_B(A)$ auch $Pr(A|B)$. Aus der Definition folgt die Grundformel $Pr(A\cap B) = Pr(A|B)*Pr(B)$. + +Achtung: die bedingte Wahrscheinlichkeit $Pr(A|B)$ ist nur definiert, wenn $Pr(B)> 0$ gilt. + +Lemma 1.15 Sei $(\Omega,Pr)$ ein Wahrscheinlichkeitsraum. +1. (,,Formel von der totalen Wahrscheinlichkeit'') Seien $B_1,...,B_t$ disjunkte Ereignisse mit $Pr(B_1\cup...\cup B_t)=1$. Dann gilt $Pr(A)=\sum_{1\leq s\leq t} Pr(A|B_s)Pr(B_s)$. +2. Seien $A,B,C$ Ereignisse mit $Pr(B\cap C),Pr(C\B)>0$. Dann gilt $Pr(A|C)=Pr(A\cap B|C) + Pr(A\B|C)= Pr(A|B\cap C)Pr(B|C) + Pr(A|C\B)Pr(\bar{B}|C)$. + +Beispiel: In dem Würfel-Wahrscheinlichkeitsraum mit $\Omega=\{1,...,6\}$ und der uniformen Verteilung betrachten wir die Ereignisse $A=\{3,6\}$ (durch 3 teilbare Augenzahl) und $B=\{2,4,6\}$ (gerade Augenzahl). Wir haben: $Pr(A\cap B) = Pr(\{6\})=\frac{1}{6}=\frac{1}{3}*\frac{1}{2}=Pr(A)*Pr(B)$. + +Damit sind die Ereignisse {Augenzahl ist gerade} und {Augenzahl ist durch 3 teilbar} (stochastisch) unabhängig im folgenden Sinn: + +**Definition 1.16** Sei $(\Omega,Pr)$ ein Wahrscheinlichkeitsraum und seien $A,B$ Ereignisse. Dann heißen A und B unabhängig, wenn $Pr(A\cap B)=Pr(A)*Pr(B)$ gilt. + +Bemerkung: Wenn $Pr(B)> 0$ gilt, dann sind $A$ und $B$ genau dann unabhängig, wenn $Pr(A) = \frac{Pr(A\cap B)}{Pr(B)})= Pr(A|B)$ gilt. Das bedeutet, dass sich durch die Information, dass B eingetreten ist, nichts an der Wahrscheinlichkeit für $A$ ändert. (Im Beispiel: Wenn wir wissen, dass die Augenzahl $b$ eim Würfeln gerade ist, dann ist die Wahrscheinlichkeit für eine Augenzahl, die durch 3 teilbar ist, genau, genau dieselbe wie im gesamten Wahrscheinlichkeitsraum.) + +**Zufallsvariable bzw. Zufallsgrößen** Zufallsvariable ordnen den Ergebnissen eines Experiments (d.h. eines Wahrscheinlichkeitsraums) ,,Werte'' aus einer Menge R zu. (Diese Werte können Zahlen oder andere ,,Eigenschaften'' sein.) + +**Definition 1.17** Sei $(\Omega,Pr)$ ein Wahrscheinlichkeitsraum und R eine endliche oder abzählbare Menge. Eine Zufallsvariable ist eine Abbildung $X:\Omega\rightarrow R$. +Zufallsvariablen mit $R\subseteq R$ heißen reelle Zufallsvariable. + +Beispiel 1.18 Zu $\Omega=\{1,2,...,N\}^q$ (q,$N\geq 1$) betrachten wir den Wahrscheinlichkeitsraum $(\Omega,Pr)$ mit der Gleichverteilung $Pr$. Beispiele für Zufallsvariablen sind: +- $R=\mathbb{N}$ und $X:\Omega\rightarrow R,(a_1,...,a_q)\rightarrow a_5$ (eine Projektion, definiert für $q\geq 5$) +- $R=\{-1,0,1\}$ und $Y_{ij}((a_1,...,a_q))=\begin{cases} -1\quad\text{falls } a_i< a_j\\ 0\quad\text{falls} a_i=a_j, \text{für } 1\leq i < j\leq n \\ 1\quad\text{falls } a_i> a_j\end{cases}$ +- $R=\mathbb{N}$ und $Z:\Omega\rightarrow R,(a_1 ,...,a_q)\rightarrow\sum_{1\leq i\leq q} a_i$ + +Sei $X:\Omega\rightarrow R$ eine Zufallsvariable. Für $S\subseteq R$ setze $Pr^X(S):= Pr(X^{-1}(S))=Pr(\{a\in\Omega|X(a)\in S\})$. Dann ist $(R,Pr^X)$ ein Wahrscheinlichkeitsraum. Dieser heißt der von $X$ auf $R$ induzierte Wahrscheinlichkeitsraum. $Pr^X$ heißt auch die Verteilung von $X$. + +Schreibweisen: Für $S\subseteq R$ ist $X^{-1}(S)=\{a\in\Omega|X(a)\in S\}$ ein Ereignis, für das wir ,,$X\in S$'' oder ,,$\{X\in S\}$'' schreiben. Für $X^{-1}(r)=\{a\in\Omega|X(a) =r\}$ schreiben wir analog ,,$X=r$'' oder ,,$\{X=r\}$''. Insbesondere schreiben wir: $Pr(X=r)=PX(r)=Pr(X^{-1}(r))$ und $Pr(X\in S)=P^X(S)=Pr(X^{-1}(S))$. + +Sind $X_i:\Omega\rightarrow R_i$ Zufallsvariable und $S_i\subseteq R_i$, für $i=1,2$, dann schreiben wir ,,$\{X_1\in S_1,X_2\in S_2\}$'' für das Ereignis $X^{-1}(S_1)\cap X^{-1}(S_2)$. Die beiden Zufallsvariablen $X_1$ und $X_2$ heißen unabhängig, wenn $Pr(X_1\in S_1,X_2\in S_2)=Pr(X_1\in S_1)*Pr(X_2\in S_2)$ gilt, für alle $S_i\subseteq R_i,i=1,2$. Dies ist gleichbedeutend mit der Forderung $Pr(X_1=r_1,X_2=r_2)=Pr(X_1=r_1)*Pr(X_2=r_2)$ für alle $r_i\in R_i, i=1,2$. + + +## Informationstheoretische Sicherheit +Man erinnere sich an Beispiel 1.12. Eine naheliegende Annahme ist, dass jeder Klartextbuchstabe mit Wahrscheinlichkeit $\frac{1}{2}$ und jeder Schlüssel mit Wahrscheinlichkeit $\frac{1}{3}$ auftritt, und zwar unabhängig voneinander. Dann ist $Pr$(Klartext x ist a $\wedge$ Chiffretext y ist A)$=\frac{1}{3}$, Pr(Chiffretext y ist A)$=\frac{1}{2}$, also Pr(Klartext x ist a | Chiffretext y ist A)$=\frac{2}{3}\not=\frac{1}{2}=$Pr(Klartext x ist a). Wenn Eva also A beobachtet,ändert sich ihre Ansicht über die Verteilung auf den Klartextbuchstaben. + +Für das Konzept der informationstheoretischen Sicherheit nehmen wir an, dass Klartexte mit bestimmten Wahrscheinlichkeiten auftreten. Was diese Wahrscheinlichkeiten sind, kann der Anwender normalerweise nicht kontrollieren. Die konsequente Anwendung des Kerckhoffs-Prinzips besagt aber, dass man annehmen muss, dass Eva die relevante Wahrscheinlichkeitsverteilung auf X kennt. (Zum Beispiel würde sie wissen, dass $Pr^X(x_0)=\frac{1}{2}$ ist, für ein bestimmtes $x_0\in X$.) Nun betrachten wir ein Kryptosystem $S=(X,K,Y,e,d). Wir nehmen an, dass Alice und Bob ihren gemeinsamen Schlüssel k durch ein Zufallsexperiment wählen. Hierzu gehört ein zweiter Wahrscheinlichkeitsraum $(K,Pr_K)$. Es ist sinnvoll anzunehmen, dass $Pr_X$ und $Pr_K$ nichts miteinander zu tun haben. Es wird verschlüsselt und Chiffretext y wird gesendet. Dieser wird von Eva beobachtet. Wenn sich dadurch die Meinung von Eva über die Wahrscheinlichkeiten der verschiedenen Klartexte von der ursprünglichen Verteilung unterscheidet (etwa jetzt: ,,mit 90%iger Wahrscheinlichkeit ist es Klartext $x_0$''), hat Eva aus der Beobachtung von y eine gewisse Information erhalten. + +Wir geben nun ein mathematisches Modell an, innerhalb dessen man über Begriffe wie ,,Eva erhält Information'' sprechen und argumentieren kann. Dazu konstruieren wir einen W-Raum mit $\Omega=X\times K$. In das Modell bauen wir die Vorstellung ein, dass $x\in X$ und $k\in K$ nach den Verteilungen $Pr_X$ und $Pr_K$ zufällig und unabhängig gewählt werden. + +Man beachte, dass die Verteilung $Pr_K$ ,,Teil des Kryptosystems'' ist, also der Kontrolle von Alice und Bob unterliegt, während $Pr_X$ ,,Teil der Anwendung'' oder ,,Teil der Realität'' ist, also von den Teilnehmern normalerweise nicht beeinflusst werden kann. Die Verteilung $Pr_X$ braucht beim Entwurf des Kryptosystems nicht einmal bekannt zu sein. (Alice und Bob sollten ihr Kryptosystem ohne Kenntnis von $Pr_X$ planen können. Die Annahme, dass Eva $Pr_X$ kennt, ist eine worst-case-Annahme, sie muss in der Realität nicht unbedingt erfüllt sein.) + +**Definition 1.19** Ein Kryptosystem mit Schlüsselverteilung (KSV) ist ein 6-Tupel $V=(X,K,Y,e,d,Pr_K)$, wobei +- $S=(X,K,Y,e,d)$ ein Kryptosystem (das zugrundeliegende Kryptosystem) ist und +- $Pr_K:K\rightarrow (0,1]$ eine Wahrscheinlichkeitsfunktion (die Schlüsselverteilung) ist. +- Für $V=(X,K,Y,e,d,Pr_K)$ schreiben wir auch $S[Pr_K]$. +- Achtung: Die Definition verlangt $Pr_K(k)\in (0,1]$, also $Pr_K(k)> 0$ für alle $k\in K$. (Hat man Schlüssel mit Wahrscheinlichkeit 0, kann man sie aus K einfach weg lassen.) + +Sei weiter $Pr_X:X\rightarrow [0,1]$ eine Wahrscheinlichkeitsfunktion auf der Menge der Klartexte. Das heißt: $\sum_{x\in X}Pr_X(x)=1$. Diese Wahrscheinlichkeitsfunktion definiert natürlich eine W-Verteilung auf X, die wir wieder $Pr_X$ nennen. (Achtung: Es kann Klartextexte mit $Pr(x)=0$ geben. Solche Klartexte heißen passiv, die anderen, mit $Pr_X(x)>0$, aktiv.) Wir definieren die gemeinsame Wahrscheinlichkeitsfunktion $Pr:X\times K\rightarrow [0,1]$ durch $Pr((x,k)):=Pr_X(x)*Pr_K(k)$. +Dies definiert einen Wahrscheinlichkeitsraum auf $X\times K$, für den $Pr(X′\times K′)=Pr_X(X′)*Pr_K(K′)$, für alle $X′\subseteq X,K′\subseteq K$ gilt. Durch diese Definition wird die Annahme modelliert, dass der Schlüssel k unabhängig vom Klartext durch ein von $Pr_K$ gesteuertes Zufallsexperiment gewählt wird. + +**Beispiel 1.20** Sei $X=\{a,b,c\},K=\{0,1,2,3\},Y=\{A,B,C\}$ und die Verschlüsselungsfunktion sei durch die folgende Tabelle gegeben: +| e | a(0,4) | b(0) | c(0,6) | +| ----------------- | ------ | ---- | ------ | +| 0 ($\frac{1}{4}$) | A | B | C | +| 1 ($\frac{1}{8}$) | B | C | A | +| 2 ($\frac{1}{2}$) | C | A | B | +| 3 ($\frac{1}{8}$) | C | B | A | + +Die Wahrscheinlichkeiten $Pr_X(x)$ sind beiden Klartexten, die Wahrscheinlichkeiten $Pr_K(k)$ beiden Schlüsseln in Klammern notiert. Klartexte a und c sind aktiv, Klartext b ist passiv. Die Wahrscheinlichkeit für einen Punkt $(x,k)\in X\times K$ erhält man durch Multiplikation: $Pr((c,2)) = 0,6 *\frac{1}{2}=0,3$ und $Pr((b,k))=0*Pr_K(k)=0$ für alle $k\in K$. + +Der Chiffretext y ist dann eine Zufallsvariable auf diesem Wahrscheinlichkeitsraum: $X_3((x,k)):=e(x,k)$. +Auch die beiden Komponenten $x$ und $k$ werden als Zufallsvariable betrachtet (Projektionen): +- $X_1:X\times K\rightarrow X,(x,k) \rightarrow x$ +- $X_2:X\times K\rightarrow K,(x,k) \rightarrow k$ + +Wir beobachten einige einfache Zusammenhänge, für $x_0\in X,k_0\in K,y_0\in Y$: +- $Pr(x_0):=Pr(X_1=x_0)=Pr(\{x_0\}\times K) = Pr_X(x_0)*Pr_K(K) = Pr_X(x_0)$. +- $Pr(k_0):=Pr(X_2=k_0)=Pr(X\times\{k_0\})=Pr_X(X)*Pr_K(k_0)=Pr_K(k_0)$ + +(Man erhält also die ursprünglichen Wahrscheinlichkeiten für Klartexte und Schlüssel zurück. Dies ist eine einfache Grundeigenschaft von Produkträumen.) + +$$Pr(y_0):=Pr(X_3=y_0)=Pr(\{(x,k)|x\in X,k\in K,e(x,k) =y_0\}) =\sum_{x\in X,k\in K,e(x,k)=y_0} Pr((x,k)) =\sum_{x\in X,k\in K,e(x,k)=y_0} Pr_X(x)*Pr_K(k)$$ + +(In Beispiel 1.20 gilt $Pr(A)=\frac{1}{4}*0,4+ \frac{1}{8}*0,6 +\frac{1}{2}*0 +\frac{1}{8}* 0,6=0,25$ und $Pr(B) =\frac{1}{4}*0 +\frac{1}{8}*0,4 +\frac{1}{2}*0,6 +\frac{1}{8}*0 = 0,35$.) + +$$Pr(x_0,y_0):=Pr(X_1=x_0,X_3=y_0)=Pr(\{x_0\}\times\{k\in K|e(x_0,k)=y_0\})= Pr_X(x_0)*\sum_{k\in K:e(x_0,k)=y_0} Pr_K(k)$$ + +(In Beispiel 1.20 gilt $Pr(c,A)=0,6*(\frac{1}{8}+\frac{1}{8})=0,15$ und $Pr(a,C)=0,6*(\frac{1}{2}+\frac{1}{8})= 0,375$.) + +$Pr(x_0|y_0):=Pr(X_1=x_0|X_3=y_0)= \frac{Pr(x_0,y_0)}{Pr(y_0)}= Pr_X(x_0)*\frac{\sum_{k\in K:e(x_0,k)=y_0} Pr_K(k)}{\sum_{x\in X,k\in K:e(x,k)=y_0} Pr_X(x)*Pr_K(k)}$. + +(In Beispiel 1.20 gilt $Pr(c|A)=0,15/0,25=0,6$.) Die letzte Formel ist nur für $y_0$ mit $Pr(y_0)>0$ definiert. + +**Definition 1.21** Sei $V=(X,K,Y,e,d,Pr_K)$ ein Kryptosystem mit Schlüsselverteilung. +1. Sei $Pr_X$ eine Wahrscheinlichkeitsfunktion auf den Klartexten. Dann heißt $V$ informationstheoretisch sicher bezüglich $Pr_X$, wenn für alle $x\in X,y\in Y$ mit $Pr(y)>0$ gilt: $Pr(x) = Pr(x|y)$. +2. Das KSV $V$ heißt informationstheoretisch sicher, wenn es bezüglich jeder beliebigen Klartextverteilung $Pr_X$ informationstheoretisch sicher ist. + +Bemerkungen: Hinter Definition 1. steckt die folgende Vorstellung: Eva kennt (im schlimmsten Fall) die Wahrscheinlichkeitsfunktion $Pr_X$. Das System gilt als sicher, wenn sich durch Abfangen eines Chiffretextes y aus Evas Sicht die Wahrscheinlichkeiten der einzelnen Klartexte x nicht ändern. Die Bedingung $Pr(y)>0$ in 1. ist nötig, damit $Pr(x|y)$ definiert ist. Sie bedeutet aber keine Einschränkung, da Chiffretexte $y$ mit $Pr(y)=0$ nie vorkommen, also auch nicht abgefangen werden können. Das Konzept in 2. ist relevant, weil man beim Entwurf eines Kryptosystems meistens die Klartextverteilung nicht oder nicht genau kennt. + +Man beachte, dass in der Definition der informationstheoretischen Sicherheit die Fähigkeiten von Eva überhaupt nicht eingeschränkt werden. Auf welche Weise sie eventuell ermittelt, dass sich Wahrscheinlichkeiten geändert haben, wird gar nicht diskutiert. (Eva könnte zum Beispiel für jedes $y\in Y$ eine Tabelle haben, in der die Wahrscheinlichkeiten $Pr(x|y)$ für alle $x\in X$ aufgelistet sind. Oder sie fängt beim Vorliegen von $y$ an, eine solche Tabelle zu berechnen. Beides ist natürlich für nicht ganz kleine X und Y völlig unrealistisch.) + +**Beispiel 1.22** +| e | a($\frac{1}{4}$) | b(\frac{3}{4}$ ) | +| ------------------ | ---------------- | ---------------- | +| $k_0(\frac{1}{3})$ | A | B | +| $k_1(\frac{2}{3})$ | B | A | + +(Notation: In der Tabelle stehen neben den Namen von Klartexten und Schlüsseln in Klammern deren Wahrscheinlichkeiten.) Dieses Kryptosystem ist possibilistisch sicher. Es gilt ab er: +$Pr(a|A)=\frac{Pr(a,A)}{Pr(A)}=\frac{\frac{1}{3}*\frac{1}{4}}{\frac{1}{3}*\frac{1}{4}+\frac{2}{3}*\frac{3}{4}}=\frac{1}{7}$ und $Pr(a)=\frac{1}{4}$. +Nach dem Abhören von A sieht also Eva den Klartext a als weniger wahrscheinlich an als vorher. Also ist dieses Kryptosystem mit Schlüsselverteilung bzgl. $Pr_X$ nicht informationstheoretisch sicher. + +**Beispiel 1.23** +| e | a($\frac{1}{4}$) | b($\frac{3}{4}$) | +| ------------------ | ---------------- | ---------------- | +| $k_0(\frac{1}{2}$) | A | B | +| $k_1(\frac{1}{2}$) | B | A | + +Dieses System ist bezüglich $Pr_X$ informationstheoretisch sicher. Zum Beispiel gilt $Pr(a|A) =\frac{Pr(a,A)}{Pr(A)}=\frac{\frac{1}{4}*\frac{1}{2}}{\frac{1}{4}*\frac{1}{2}+\frac{3}{4}*\frac{1}{2}}=\frac{\frac{1}{8}}{\frac{1}{2}}=\frac{1}{4}$ und $Pr(a)=\frac{1}{4}$. Die anderen drei verlangten Gleichheiten rechnet man analog nach. + +**Satz 1.24** (Informationstheoretische Sicherheit des Vernam-Systems) Sei $l>0$ und $S=(X,K,Y,e,d)$ mit $X=K=Y=\{0,1\}^l$ und $e=d=\oplus_l$ das Vernam-System der Länge $l$. Sei weiter $Pr_K:K\rightarrow [0,1]$ die Gleichverteilung. Dann ist $V=S[Pr_K]$ informationstheoretisch sicher. + +Beweis: Sei $Pr_X:X\rightarrow [0,1]$ eine beliebige Wahrscheinlichkeitsfunktion. Wir müssen zeigen, dass $V$ bezüglich $Pr_X$ informationstheoretisch sicher ist. Wir beginnen mit folgender Beobachtung: Zu $x\in X$ und $y\in Y$ existiert genau ein $k_{x,y}\in K$ mit $e(x,k_{x,y})=y$, nämlich $k_{x,y}=x\oplus_l y$. Damit gilt für jedes $y\in Y$: $Pr(y)=\sum_{x\in X,k\in K,e(x,k)=y} Pr(x)Pr(k) = \sum_{x\in X} Pr(x) Pr(kx,y)= 2^{-l}* \sum_{x\in X} Pr(x)=2^{-l}$. + +(D.h.: Jeder Chiffretext y hat dieselbe Wahrscheinlichkeit $2^{-l}$, ganz gleich was $Pr_X$ ist.) +Sei nun $x\in X$ und $y\in Y$ beliebig gewählt. Dann gilt $Pr(x,y) = Pr(x)*\sum_{k\in K, e(x,k)=y} Pr(k) = Pr(x)*Pr(k_{x,y}) = Pr(x)* 2^{-l}= Pr(x)*Pr(y)$. + +Damit folgt $Pr(x)=\frac{Pr(x,y)}{Pr(y)}= Pr(x|y)$, wie bei der informationstheoretischen Sicherheit verlangt. + +Bemerkung 1.25 +1. Der Beweis und damit das Vernamsystem kommt mit jeder beliebigen Klartextverteilung zurecht. +2. Im KSV V wird die Gleichverteilung $Pr_K$ auf den Schlüsseln benutzt. + +Wir wollen nun überlegen, dass diese beiden Sachverhalte nicht zufällig sind. Es wird sich herausstellen, dass informationstheoretische Sicherheit inbestimmten Fällen (nämlich wenn y und K möglichst ,,sparsam'' gebaut sind) Gleichverteilung auf den Schlüsseln erzwingt, und dass die informationstheoretische Sicherheit eines KSV nichts mit den konkreten Wahrscheinlichkeiten der Klartextverteilung $Pr_X$ zu tun hat, sondern nur die Menge $\{x\in X|Pr_X(x)> 0\}$ der ''aktiven'' Klartexte relevant ist. + +Lemma 1.26 Sei $V=(X,K,Y,e,d,Pr_K)$ ein KSV. Sei $V$ informationstheoretisch sicher bezüglich einer Klartextverteilung $Pr_X$ mit $Pr(x)>0$ für alle $x\in X$. Dann gilt: +1. $Pr(y)>0$ für alle $y\in Y$, und $S=(X,K,Y,e,d)$ ist possibilistisch sicher. +2. Gilt zusätzlich $|X|=|Y|=|K|$, so gilt $Pr_K(k)=\frac{1}{|K|}$ für alle $k\in K$. + +Beweis: +1. Sei $y\in Y$ beliebig. Nach Definition 1.1(2) gibt es $x_0\in X$ und $k_0\in K$ mit $e(x_0,k_0)=y$. Da $Pr_X(x_0)>0$ (nach Vor.) und $Pr_K(k_0)>0$ (nach Def 1.19),erhalten wir $Pr(y)\geq Pr_X(x_0)Pr_K(k_0)>0$. Sei nun zusätzlich auch $x\in X$ beliebig. Dann gilt: $\sum_{k\in K:e(x,k)=y} Pr(x)Pr(k)= Pr(x,y)= Pr(x|y)Pr(y)=^* Pr(x)Pr(y)> 0$. ((*) gilt, da V informationstheoretisch sicher bzgl. $Pr_X$ ist.) Also existiert $k\in K$ mit $e(x,k)=y$. Da $x$ und $y$ beliebig waren, ist S possibilistisch sicher. +2. Nun nehmen wir zusätzlich $|X|=|Y|=|K|$ an. Wir beobachten zuerst zwei Dinge: + 1. Für jedes $x\in X$ ist die Abbildung $K\ni k \rightarrow e(x,k)\in Y$ bijektiv. (Dass diese Abbildung surjektiv ist, ist eine Umformulierung der possibilistischen Sicherheit, die nach 1. gegeben ist. Aus Surjektivität folgt Bijektivität, wegen $|K|=|Y|$.) + 2. Für jedes $k\in K$ ist die Abbildung $X\ni x \rightarrow e(x,k)\in Y$ bijektiv. (Dass die Abbildung injektiv ist, folgt aus der Dechiffrierbedingung. Aus Injektivität folgt Bijektivität, wegen $|X|=|Y|$.) + +Nun seien $k_1,k_2\in K$ beliebig. Unser Ziel ist zu zeigen, dass $Pr(k_1)=Pr(k_2)$ gilt. (Dann ist gezeigt,dass $Pr_K$ die uniforme Verteilung ist.) Wähle $x\in X$ beliebig und setze $y:=e(x,k_1)$. Beachte, dass es wegen 1. keinen Schlüssel $k\not=k_1$ mit $y=e(x,k)$ gibt. Wegen 2. gibt es ein $x′\in X$ mit $e(x′,k_2)=y$. Auch hier gibt es kein $k′\not=k_2$ mit $e(x′,k′)=y$. Es gilt also: $Pr(x)Pr(k_1)=\sum_{k\in K:e(x,k)=y} Pr(x)Pr(k) = Pr(x,y) = Pr(x|y)Pr(y) =^* Pr(x)Pr(y)$, und daher $Pr(k_1)=Pr(y)$, wegen $Pr(x)>0$. (* gilt, weil $V$ informationstheoretisch sicher ist.) Analog gilt $Pr(x′)Pr(k_2)=Pr(x′)Pr(y)$, und daher $Pr(k_2)=Pr(y)$. Es folgt $Pr(k_1)=Pr(k_2)$, wie gewünscht. +Teil 2. dieses Lemmas hat eine Umkehrung. + +Lemma 1.27 Sei $V=(X,K,Y,e,d,Pr_K)$ KSV mit $|X|=|Y|=|K|$. Wenn $S=(X,K,Y,e,d)$ possibilistisch sicher ist und $Pr_K$ die Gleichverteilung ist, dann ist $V$ informationstheoretisch sicher. + +Beweis: Es sei eine beliebige Klartextverteilung $Pr_X$ gegeben. Da S possibilistisch sicher ist und $|X|=|Y|=|K|$ gilt,existiert für jedes Paar $(x,y)\in X\times Y$ genau ein $k_{x,y}\in K$ mit $e(x,k_{x,y}) =y$ (vgl.Aussage 1. im Beweis des vorherigen Lemmas). +Damit gilt für jedes $y\in Y$:$Pr(y)=\sum_{x\in X,k\in K:e(x,k)=y} Pr(x)Pr(k) =\sum_{x\in X} Pr(x) Pr(k_{x,y})=\frac{1}{|K|}* \sum_{x\in X} Pr(x) = \frac{1}{|K|}$. +Wir haben benutzt, dass $Pr_K$ die uniforme Verteilung ist und dass $\sum_{x\in X} Pr(x) = 1$ gilt. +Seien nun $x\in X$ und $y\in Y$ beliebig. Wenn $Pr(x)=0$ ist, gilt auf jeden Fall $Pr(x|y)=0=Pr(x)$. Wir können also $Pr(x)> 0$ annehmen und rechnen: $Pr(x|y) =\frac{Pr(x,y)}{Pr(y)}=\frac{Pr(y|x)*Pr(x)}{Pr(y)}=\frac{Pr_K(k_{x,y})*Pr(x)}{Pr(y)}=^* \frac{\frac{1}{|K|}*Pr(x)}{\frac{1}{|K|}}=Pr(x)$. +(Für * benutzen wir die Annahme über $Pr_K$ und die Gleichheit $Pr(y)=\frac{1}{|K|}$ von oben.) Das heißt, dass V für $Pr_X$ informationstheoretisch sicher ist. +Aus den beiden Lemmas erhalten wir den folgenden Satz, der die informationstheoretisch sicheren KSVs für den Fall $|X|=|Y|=|K|$ vollständig beschreibt. + +Satz 1.28 Sei $V= (X,K,Y,e,d,Pr_K)$ ein KSV mit $|X|=|Y|=|K|$. Dann sind äquivalent: +1. $V$ ist informationstheoretisch sicher. +2. $(X,K,Y,e,d)$ ist possibilistisch sicher und $Pr_K(k)=\frac{1}{|K|}$ für alle $k\in K$. + +Beweis: ,,$(a)\Rightarrow (b)$'': Wenn V informationstheoretisch sicher ist, dann auch bezüglich einer Klartextverteilung $Pr_X$, in der alle Klartexte aktiv sind. Lemma 1.26 liefert 2. ,,$(b)\Rightarrow (a)$'': Lemma 1.27. + +Der Satz besagt, dass man informationstheoretisch sichere Systeme mit $|X|=|Y|=|K|$ daran erkennt, dass in der Verschlüsselungstabelle (für e) in jeder Spalte alle Chiffretexte vorkommen (possibilistische Sicherheit) und dass die Schlüsselverteilung $Pr_K$ uniform ist. Auch in jeder Zeile kommen natürlich alle Chiffretexte vor: das liegt aber einfach an der Dechiffrierbedingung. +Wir geben ein Beispiel für ein solches informationstheoretisch sicheres Kryptosystem mit $|X|=|Y|=|K|=6$ an. Die Klartextverteilung ist irrelevant. (Die Verschlüsselungsfunktion ist übrigens mit Hilfe der Multiplikationstabelle der multiplikativen Gruppe $\mathbb{Z}^*_7$ des Körpers $\mathbb{Z}_7$ konstruiert worden. Solche Tabellen haben die Eigenschaft, dass jeder mögliche Eintrag in jeder Zeile und in jeder Spalte genau einmal vorkommt.) + +Beispiel 1.29 Wir betrachten $X=\{a,b,c,d,e,f\},K=\{k_0 ,...,k_5\},Y=\{A,...,F\}$. +| e | a | b | c | d | e | f | +| ------------------- | --- | --- | --- | --- | --- | --- | +| $k_0 (\frac{1}{6})$ | A | B | C | D | E | F | +| $k_1 (\frac{1}{6})$ | B | D | F | A | C | E | +| $k_2 (\frac{1}{6})$ | C | F | B | E | A | D | +| $k_3 (\frac{1}{6})$ | D | A | E | B | F | C | +| $k_4 (\frac{1}{6})$ | E | C | A | F | D | B | +| $k_5 (\frac{1}{6})$ | F | E | D | C | B | A | + +Nun betrachten wir allgemeinere Situationen, und fragen auch nach informationstheoretischer Sicherheit für spezifische Klartextverteilungen $Pr_X$ und für Mengen $K$ und $Y$, die größer als $X$ sind. Die Bedingung ,,uniforme Verteilung auf den Schlüsseln'' verschwindet dann komplett! Wir erinnern uns: Klartexte $x$ mit $Pr_X(x)> 0$ heißen aktiv (bzgl. $Pr_X$), die anderen passiv. Es wird sich herausstellen, dass sich informationstheoretische Sicherheit für $Pr_X$ mit dem Verhalten von $e(x,k)$ auf den aktiven Klartexten entscheidet, wobei es auf die tatsächlichen Wahrscheinlichkeiten für die aktiven Klartexte nicht ankommt. + +Technisch hilfreich sind die folgenden Größen, die nur von der Verschlüsselungsfunktion und der Schlüsselverteilung abhängen (nicht von irgendeiner Klartextverteilung): $P^x(y):=\sum_{k\in K, e(x,k)=y} Pr(k)$, für $x\in X,y\in Y$ (1.1). +Man beobachtet sofort die folgenden Gleichungen, die aus der Unabhängigkeit der Verteilungen $Pr_X$ und $Pr_K$ folgen: +- Für alle $x\in X:Pr(x,y) = Pr(x)*P^x(y)$. (1.2) +- Wenn $Pr(x)> 0$:$Pr(y|x) = \frac{Pr(x,y)}{Pr(x)}=P^x(y)$. (1.3) + +Umgekehrt wie bei der Definition der informationstheoretischen Sicherheit stellt man sich hier vor, dass ein Klartext x gegeben ist und man fragt nach der resultierenden Verteilung auf den Chiffretexten. +Das nächste Lemma besagt, dass man die Wahrscheinlichkeiten aktiver Klartexte beliebig ändern kann (auch auf 0, also sie weglassen), ohne dass eine bestehende informationstheoretische Sicherheit zerstört wird. + +Lemma 1.30 Sei $V=(X,K,Y,e,d,Pr_K)$ KSV und seien $Pr_X$ und $Pr′_X$ Klartextverteilungen mit $Pr′_X(x)>0\Rightarrow Pr_X(x)>0$. Dann gilt: Ist $V$ informationstheoretisch sicher bzgl. $Pr_X$, so ist V informationstheoretisch sicher bzgl. $Pr′_X$. + +Beweis: Sei $V$ informationstheoretisch sicher bzgl. $Pr_X$. Wir haben es jetzt mit zwei Wahrscheinlichkeitsräumen zu tun, einem zu $Pr_X$ und $Pr_K$ (bezeichnet mit $(X\times K,Pr)$) und einem zu $Pr′_X$ und $Pr_K$ (bezeichnet mit $(X\times K,Pr′)$). +Wir zeigen nacheinander vier Aussagen. +1. $Pr_X(x)> 0 \Rightarrow P^x(y) = Pr(y|x) = Pr(y)$ für alle $y\in Y$. (Die Verteilungen $Pr^X(*)=Pr(*|x)$ auf den Chiffretexten sind für alle (Pr-)aktiven Klartexte x gleich und sind auch gleich der globalen Verteilung auf den Chiffretexten.) Beweis hierzu: Sei $Pr(x)>0$. Dann gilt $P^x(y)=Pr(y|x)$, siehe (1.3). Wenn $Pr(y)=0$ gilt, folgt auch $Pr(y|x)=0$. Sei also $Pr(y)>0$. Dann gilt: $Pr(y|x) =\frac{Pr(x,y)}{Pr(x)}=\frac{Pr(x|y)Pr(y)}{Pr(x)}=^* \frac{Pr(x)Pr(y)}{Pr(x)}= Pr(y)$. (* gilt, weil V informationstheoretisch sicher bzgl. $Pr_X$ ist.) +2. $Pr′_X(x)> 0 \Rightarrow Pr′(y|x) = Pr(y)$ für alle $y\in Y$. Beweis hierzu: Aus $Pr′(x)>0$ folgt $Pr(x)>0$, nach Voraussetzung. Wir wenden (1.3) für $Pr′$ und für $Pr$ an und erhalten für alle $y\in Y$: $Pr′(y|x)=P^x(y)=Pr(y|x)=^a Pr(y)$. +3. $Pr′(y)=Pr(y)$ für alle $y\in Y$. Beweis hierzu: Mit Lemma 1.15(a) (Formel von der totalen Wahrscheinlichkeit): $Pr′(y)=\sum_{x\in X: Pr′(x)> 0} Pr′(y|x)Pr′(x)=^b \sum_{x\in X: Pr′(x)> 0} Pr(y)Pr′(x) = Pr(y)$. +4. $Pr′(x)=Pr′(x|y)$ für alle $x\in X,y\in Y$ mit $Pr′(y)>0$. (D.h.: V ist bzgl. $Pr′_X$ informationstheoretisch sicher.) Beweis hierzu: Wenn $Pr′(x)=0$ gilt, dann folgt $Pr′(x|y)=0=Pr′(x)$. Sei nun $Pr′(x)>0$. Dann: $Pr′(x|y)=\frac{Pr′(x,y)}{Pr′(y)}=\frac{Pr′(y|x)Pr′(x)}{Pr′(y)}=^{b,c} \frac{Pr(y)Pr′(x)}{Pr(y)} = Pr′(x)$. + +Satz 1.31 Sei $V=(X,K,Y,e,d,Pr_K)$ KSV und sei $Pr_X$ eine Klartextverteilung. Dann sind äquivalent: +1. V ist informationstheoretisch sicher für $Pr_X$. +2. Für jedes $x\in X$ und jedes $y\in Y$ gilt: $Pr(x,y)=Pr(x)Pr(y)$ (das Eintreten von x und das Eintreten von y sind unabhängig). +3. Für alle $x\in X$ mit $Pr(x)>0$ und alle $y\in Y$ gilt $Pr(y)=Pr(y|x)$ (andere Formulierung der Unabhängigkeit). +4. Für alle $x,x′\in X$ mit $Pr(x),Pr(x′)>0$ und alle $y\in Y$ gilt $P^x(y)=P^{x′}(y)$. + +Bemerkung: Bedingung 1. fragt nach der Situation bei gegebenem Chiffretext y mit $Pr(y)>0$. Bedingung 2. ist die wahrscheinlichkeitstheoretisch klarste Charakterisierung von informationstheoretischer Sicherheit, ohne bedingte Wahrscheinlichkeiten zu verwenden. Bedingungen 3. und 4. machen deutlich, dass es nur auf das Verhalten des Kryptosystems (mit seiner Verteilung $Pr_K$) auf den aktiven Klartexten ankommt, nicht auf die Klartextverteilung. Sie sagen auch, worauf genau es ankommt: Für jeden beliebigen aktiven Buchstaben ist die von $e(x,*)$ und der Schlüsselverteilung erzeugte Verteilung auf den Chiffretexten gleich, und zwar gleich der absoluten Verteilung auf den Chiffretexten. Informationstheoretische Sicherheit von $V$ (also für alle Klartextverteilungen) heißt also, dass alle Funktionen $P^x:Y\rightarrow [0,1]$, für $x\in X$, gleich sind (weil man als $Pr_X$ eine Verteilung wählen kann, bei der alle Klartexte aktiv sind, zum Beispiel die Gleichverteilung). + +Beweis: +- ,,$1.\Rightarrow 2.$'': Wenn $Pr(y)=0$, gilt $Pr(x,y)=0=Pr(x)Pr(y)$. Sei jetzt $Pr(y)>0. Dann gilt $Pr(x,y)=Pr(y)Pr(x|y) = Pr(y)Pr(x)$, nach 1. +- ,,2.\Rightarrow 3.'': Wegen 2. gilt $Pr(y)Pr(x)=Pr(x,y)$. Andererseits ist $Pr(y|x)Pr(x)=Pr(x,y)$, also folgt 3. durch Kürzen mit $Pr(x)>0$. +- ,,3.\Rightarrow 4.'': Verwende (1.3) für $x$ und $x′$ und benutze 3. +- ,,4.\Rightarrow 1.'': (Dies ist natürlich der entscheidende und schwierigste Beweisschritt!) Nach Voraussetzung 4. gibt es für jedes $y\in Y$ ein $p_y$ mit $P^x(y)=p_y$ für alle aktiven $x\in X$. + - Nach Lemma 1.15.1 (Formel von der totalen Wahrscheinlichkeit) gilt dann für jedes y: $Pr(y)=\sum_{x\in X:Pr(x)>0} Pr(y|x)*Pr(x) = \sum_{x\in X: Pr(x)>0} P^x(y)*Pr(x) = \sum_{x\in X:Pr(x)>0} p_y*Pr(x) =p_y$. + - Sei nun $y\in Y$ mit $Pr(y)>0$, und sei $x\in X$. Wenn $Pr(x)=0$ gilt, folgt auch $Pr(x|y)=0$. Wenn $x$ aktiv ist, dann gilt $Pr(x|y)=\frac{Pr(x,y)}{Pr(y)}=\frac{Pr(y|x)Pr(x)}{p_y}=\frac{P^x(y)Pr(x)}{p_y}=Pr(x)$, wie gewünscht. + +Beispiel 1.32 Wir geben noch ein Beispiel für ein informationstheoretisch sicheres Kryptosystem mit $|X|=4,|Y|=6$ und $|K|=8$ an. Die Klartextverteilung ist irrelevant. Sei $X=\{a,b,c,d\},K=\{k_0,...,k_7\},Y=\{A,B,C,D,E,F\}$, und $e$ durch die folgende Tabelle gegeben. (Sie entsteht durch Zusammensetzen zweier informationstheoretisch sicherer Kryptosysteme mit jeweils vier Schlüsseln und vier Chiffretexten.) +| e | a | b | c | d | +| -------------------- | --- | --- | --- | --- | +| $k_0 (\frac{1}{6})$ | A | B | C | D | +| $k_1 (\frac{1}{6})$ | B | C | D | A | +| $k_2 (\frac{1}{6})$ | C | D | A | B | +| $k_3 (\frac{1}{6})$ | D | A | B | C | +| $k_4 (\frac{1}{12})$ | A | B | E | F | +| $k_5 (\frac{1}{12})$ | B | A | F | E | +| $k_6 (\frac{1}{12})$ | E | F | A | B | +| $k_7 (\frac{1}{12})$ | F | E | B | A | + +Offensichtlich ist die Schlüsselverteilung nicht uniform. Jeder Schlüssel $k$ hat eine andere Chiffre $x\rightarrow e(x,k)$. Die (absoluten) Wahrscheinlichkeiten für die Chiffretexte sind ebenfalls nicht uniform ($Pr(A)=Pr(B)=\frac{1}{4}$, $Pr(C)=Pr(D)=\frac{1}{6}$, $Pr(E)=Pr(F)=\frac{1}{12}$). +Die informationstechnische Sicherheit drückt sich dadurch aus, dass diese Chiffretextwahrscheinlichkeiten auch für jeden Klartext (also jede Spalte) separat auftreten. + +## Fallstudie für Cyphertext-only-Angriffe: Vigenère-Chiffre +In der Einleitung wurde schon kurz die sogenannte Vigenère-Chiffre angesprochen. Dies ist ein klassisches Verfahren zur Verschlüsselung natürlich sprachiger Texte. Üblicherweise nimmt man dabei den zu verschlüsselnden Text, lässt alle Satzzeichen und alle Leerzeichen weg und wandelt Groß-in Kleinbuchstaben um. Umlaute und andere Sonderzeichen werden umschrieben. Resultat ist eine Folge $x=(x_0,...,x_{l-1})=x_0 ...x_{l-1}$ von Buchstaben im Klartextalphabet $\{a,...,z\}$ der Größe 26. Wir betrachten hier nur den Fall, wo die Klartextlänge von vornherein beschränkt ist (gemäß Szenario 1), also ist $l\geq L$ für ein festes L. Nun möchte man $x$ verschlüsseln. Ein informationstheoretisch sicheres Verfahren ist, für jede Buchstabenposition $0\geq i < L$ rein zufällig einen Schlüssel $k_i\in\{A,...,Z\}$ zu wählen und an Position $i$ die Verschiebechiffre mit Schlüssel $k_i$ anzuwenden. Der Schlüssel $k_0,...,k_{L-1}$ ist dann aber mindestens so lang wie die Klartextfolge. Allerdings ist das nach unseren bisherigen Ergebnissen auch unvermeidlich: Wenn $V=(X,K,Y,e,d,Pr_K)$ informationstheoretisch sicher ist, ist $(X,K,Y,e,d)$ possibilistisch sicher, also $|X|\geq |K|$. + +Es liegt nahe, zu versuchen, mit nur einem Schlüsselbuchstaben oder mit einem kürzeren Schlüssel auszukommen. Dies führt zur einfachen (wiederholten) Verschiebechiffre und zur Vigenère-Chiffre. Wir zeigen, dass man diese mit einfachen Mitteln ,,brechen'' kann. + +### Die Vigenère-Chiffre und Angriffe bei bekannter Schlüssellänge +Es ist bequem, anstelle von Buchstaben mit Zahlen zu rechnen. Mit $Z_n$ bezeichnen wir den Ring $\mathbb{Z}/n\mathbb{Z}$, also (etwas vereinfachend gesagt) den Ring der Zahlen $\{0,1,...,n-1\}$ mit Addition und Multiplikation modulo n als Operationen. + +Definition: Eine Verschiebechiffre ist ein Kryptosystem $S=(Z_n,Z_n,Z_n,e,d)$ mit $e(x,k)=(x+k) mod\ n$. (Offensichtlich ist dann $d(y,k)=(y-k)mod\ n$.) + +Unser zentrales Beispiel ist der Fall $n=26$, also $X=Y=K=\{0,1,2,...,25\}$. Wir identifizieren die Elemente dieser Menge mit den Buchstaben $a,...,z$ (bei X) bzw. $A,...,Z$ (bei K und Y). Die Konvention ist nach wie vor, Klartextbuchstaben klein und Schlüsselbuchstaben und Chiffretextbuchstaben groß zu schreiben. + +Die einfachste Methode ist folgende Version der Cäsar-Chiffre: Wähle einen Schlüssel k aus $K=\{0,1,...,25\}=\{A,...,Z\}$ zufällig. Um ,,Texte'' (d.h. Wörterüber $\mathbb{Z}_n$) zu verschlüsseln, wird S buchstabenweise angewandt: Aus $x_0 x_1...x_{l-1}$ wird $e(x_0,k)e(x_1,k)...e(x_{l-1},k)$. + +Diese Methode ist allerdings sehr leicht zu brechen, sogar ,,von Hand'', also ohne massiven Einsatz von Computern. Es gibt mindestens die folgenden naheliegenden Möglichkeiten, einen gegebenen Chiffretext $y_0...y_{l-1}$, der aus einem natürlichsprachigen Text entstanden ist, zu entschlüsseln: +1. probiere die 26 möglichen Schlüssel aus, oder +2. zähle, welche Buchstaben am häufigsten im Chiffretext vorkommen und teste die Hypothese, dass einer von diesen für ,,e'' steht. + +Betrachte beispielsweise den Chiffretext $RYFWAVSVNPLVOULHUZAYLUNBUN$. +- Zählen liefert folgende Häufigkeiten für die häufigsten Buchstaben: $U:4,L:3,N:3,V:3$. +- Vermutung: Einer dieser Buchstaben entspricht dem ,,e''. +- Der Schlüssel $k$ mit $e(e,k)=U$ ist $k=Q$. Entschlüsselung mit $Q$ liefert das Wort $bipgkfcfxzvfyevrejkivexlex$, das nicht sehr sinnvoll erscheint. +- Der Schlüssel $k$ mit $e(e,k)=L$ ist $k=H$. Entschlüsselung mit $H$ liefert kryptologie ohne anstrengung, und wir sind fertig. +- Als Basis für solche Entschlüsselungsansätze benutzt(e) man Häufigkeitstabellen für Buchstaben, wie die folgende (Angaben in Prozent): + | Englisch | Deutsch | Italienisch | + | --------- | --------- | ----------- | + | E,e 12,31 | E,e 18,46 | E,e 11,79 | + | T,t 9,59 | N,n 11,42 | A,a 11,74 | + | A,a 8,05 | I,i 8,02 | I,i 11,28 | + | O,o 7,94 | R,r 7,14 | O,o 9,83 | +- Dass das ,,e'' im Deutschen deutlich häufiger als im Englischen ist, liegt auch daran, dass bei der Umschreibung der Umlaute ä,ö und ü als ae, oe, ue jeweils ein ,,e'' entsteht.) + +Man kann auch die Häufigkeiten von ,,Digrammen'' (zwei Buchstaben, z.B. ng) oder ,,Trigrammen'' (drei Buchstaben, z.B. ung oder eit) heranziehen, auch um unterschiedliche Sprachen zu unterscheiden. + +Eine unangenehme Eigenschaft bei der wiederholten Anwendung von reinen Verschiebechiffren ist, dass identische Buchstaben stets gleich verschlüsselt werden. Zum Beispiel hat unabhängig vom Schlüssel der Klartext otto stets zu einem Chiffretext mit dem Muster abba. + +Die Grundidee der Vigenère-Chiffre ist es nun, verschiedene Verschiebechiffren in festgelegter zyklischer Reihenfolge zu verwenden. + +Schlüssel: $k=k_0 k_1 k_2 ...k_{s-1}\in Z^s_n,s\in\mathbb{N}$. (Eine Folge von Verschiebewerten.) + +Klartext: $x=x_0 x_1...x_{l-1} \in Z^l_n,l\in\mathbb{N}$. + +Man verschlüsselt $x_0$ mit $k_0$, $x_1$ mit $k_1$, und so weiter. Wenn irgendwann der Schlüssel ,,aufgebraucht'' ist, weil $s1:AB(4)DE(4)F(14)GH(2)IJ(5)LM(3)O(4)P(5)S(5)T(7)U(7)V(6)X$ + - Mögliches Bild von ,,e'': F. Schlüsselbuchstabe wäre: B +- $y^1 =YWHHCNLXSIHXMZCNCVNAUOOMWMYUCVCYUNHLNALYECUUMYYIUYLBLHAYLCZBYVWBFHLCMNAYNY$. + - Buchstaben in $y^1:A(4)B(3)C(8)EFH(6)I(2)L(7)M(5)N(7)O(2)SU(5)V(3)W(2)X(2)Y(19)Z(2)$ + - Mögliches Bild von ,,e'':Y. Schlüsselbuchstabe wäre: U +- $y^2 =RLSMSEJMTKZMMSREGYEOYIVKLWOIIYQRWXHMEOYLEQXQAHVVWAIVFMIVHIXVVILXEFWRXIEPLR$. + - Buchstaben in $y^2:A(2)E(7)F(2)GH(3)I(8)JK(2)L(5)M(6)O(2)PQ(3)R(5)S(3)TV(7)W(4)X(5)Y(4)Z$ + - Mögliche Bilder von ,,e'':I,V. Schlüsselbuchstaben wären: E,R +- $y^3 =YJIJEELVKZVXVIVRYVVVJSURCVIIZVUGKVWYVVEEKDSVLRXXJREVVTJKVUVVFIEMJVZVVRSFR$. + - Buchstaben in $y^3 :CDE(6)F(2)GI(5)J(6)K(4)L(2)MR(6)S(3)TU(3)V(21)WX(3)Y(3)Z(3)$ + - Mögliches Bild von ,,e'':V. Schlüsselbuchstabe wäre: R +- $y^4 =CHUOGRVYCSBKWAFHSFHWUHSPIZSSVFCOVBIFHWRRSCSBFTSHGSRFWVHKBIBPGOWSGJSUZISSH$. + - Buchstaben in $y^4 :AB(5)C(4)F(6)G(4)H(8)I(4)JK(2)O(3)P(2)R(4)S(13)TU(3)V(4)W(5)YZ(2)$ + - Mögliches Bild von ,,e'':S. Schlüsselbuchstabe wäre: O + +Man versucht Schlüssel BURRO und erhält keinen sinnvollen Text. Mit BUERO ergibt sich: +denho echst enorg anisa tions stand erfuh rdiek rypto logie +inven edigw osiei nform einer staat liche nbuer otaet igkei +tausg euebt wurde esgab schlu essel sekre taere dieih rbuer +oimdo genpa lasth atten undfu erihr etaet igkei trund zehnd +ukate nimmo natbe kamen eswur dedaf uerge sorgt dasss iewae +hrend ihrer arbei tnich tgest oertw urden siedu rften ihreb +ueros abera uchni chtve rlass enbev orsie eineg estel lteau +fgabe geloe sthat ten + +Ohne Gruppierung erhält man: +denhoechstenorganisationsstanderfuhrdiekryptologie +invenedigwosieinformeinerstaatlichenbuerotaetigkei +tausgeuebtwurdeesgabschluesselsekretaeredieihrbuer +oimdogenpalasthattenundfuerihretaetigkeitrundzehnd +ukatenimmonatbekameneswurdedafuergesorgtdasssiewae +hrendihrerarbeitnichtgestoertwurdensiedurftenihreb +uerosaberauchnichtverlassenbevorsieeinegestellteau +fgabegeloesthatten + +Nun muss man nur noch die Wortzwischenräume und Satzzeichen ergänzen, um zu erhalten: +Den höchsten Organisationsstand erfuhr die Kryptologie in Venedig, wo sie in Form einer staatlichen Bürotätigkeit ausgeübt wurde. Es gab Schlüsselsekretäre, die ihr Büro im Dogenpalast hatten und für ihre Tätigkeit rund zehn Dukaten im Monat bekamen. Es wurde dafür gesorgt, dass sie während ihrer Arbeit nicht gestört wurden. Sie durften ihre Büros aber auch nicht verlassen, bevor sie eine gestellte Aufgabe gelöst hatten. + +### Der Kasiski-Test +Das bisher betrachtete Verfahren setzt voraus, dass die Schlüssellänge s bekannt ist. Ist die maximale Schlüssellänge S klein, dann kann man die Schlüssellängen 1 bis S einzeln durchprobieren. Ist S groß, möchte man die Suche nach der richtigen Schlüssellänge abkürzen. (Besonders vor dem Computerzeitalter, wo die Dechiffrierung per Hand durchgeführt werden musste, war eine solche Zeitersparnis wichtig.) Die Schlüssellänge kann oft durch den Kasiski-Test näherungsweise bestimmt werden. (Der Test ist benannt nach Friedrich Wilhelm Kasiski (1805, 1881), einem preußischen Infanteriemajor. Der Test wurde von ihm 1863 veröffentlicht. Er war aber bereits 1854 von Charles Babbage entwickelt, aber nicht veröffentlicht worden.) + +Die zentrale Idee des Tests ist die folgende einfache Beobachtung: Gleiche Klartextfragmente, die eventuell mehrfach vorkommen (z.B. das Wort ,,ein'') werden in gleiche Chiffretexte übersetzt, wenn sie unter dem gleichen Schlüsselfragment liegen. Genauer: Stimmt der Klartext im Abschnitt $i+s*l$ bis $j+s*(l+h)$ mit dem Klartext im Abschnitt von $i+s*l′$ bis $j+s*(l′+h)$ überein, so gilt dies auch für den Chiffretext $(1\geq i,j\geq s,l,l′,h\in\mathbb{N})$. +Anders ausgedrückt: Kommt ein Teilwort im Klartext an zwei Positionen i und j und ist j-i ein Vielfaches von s, so werden die beiden Vorkommen des Wortes gleich verschlüsselt. + +Diese Beobachtung wird in die folgende Idee für einen Angriff umgemünzt: Für möglichst viele ,,lange'' Wörter, die im Chiffretext mehrfach auftreten, notiere die Abstände des Auftretens. (,,lang'' sollte wenigstens 3 sein.) Dann suche ein großes s, das viele dieser Abstände teilt (nicht unbedingt alle, denn einige Mehrfach vorkommen im Chiffretext könnten zufällig entstanden sein). + +Beispiel 1.34 Im Chiffretext von Abbildung 1 kommen (mindestens) die folgenden Wörter der Länge 3 mehrfach vor. Wir geben die Positionen und die Abstände an. + +| | #Wörter | +| ----------------------------------------------------------- | ------- | +| AWMCJ IENAW NMOZV EYJOK HPXNK TFKQC JPJSJ NTIVT TCOJA AWKBS | 50 | +| NHKBV UYMJG NNUAH UEKFF DLNSJ SZRZL EUKRW IYLCJ MLZWC ECOBM | 100 | +| NOPSV ECOBX OCSOL IVKFC EYTHF IDYSM EMKFV IPCSK EYZZA CSKBS | 150 | +| LRUFA TSSWK CSKBO ECQNW URKVS BPTIW BPXGL RFQHM RPTRA EPYSJ | 200 | +| LLAPW NOGHW NPLTA ZTKBL ZFUFY AYOGA ECKBM NOGIX ZFLWF DPTIW | 250 | +| BPXVS EFLWY BPTIL ZEKOD GZXWL HXKBM NOAST ECJWW SEGBV ACJHW | 300 | +| CSTWC EYSWL DPTSF MLTOD GZXWL HXOGU HPVFG BWKAW MZJSD LTKFW | 350 | +| NGKFK TPNSF UYJZG EDKBC AYT | + +| Wort | Positionen | Abstände | +| --------- | --------------- | -------- | +| ODGZXWLHX | 269 , 319 | 50 | +| DPT | 246 , 311 | 65 | +| BPT | 176 , 261 | 115 | +| ECOB | 96 , 106 | 10 | +| CSK | 138 , 146 , 161 | 8*, 15 | +| AWM | 1 , 339 | 338* | +| PTIWBPX | 177 , 247 | 70 | +| BMNO | 99 , 234 , 279 | 135 , 45 | + +Wir vermuten: Periode ist 5 (dann wären Wiederholungen von AWM und CSK durch Zufall entstanden) + +Das Ergebnis der Entschlüsselung wie oben beschrieben mit vermuteter Schlüssellänge 5 und versuchten Schlüsseln ALGXS (erfolglos) und ALGOS (erfolgreich) ergibt den folgenden Text. +| | #Wörter | +| ----------------------------------------------------------- | ------- | +| algor ithme nbild endas herzs tueck jeder nicht trivi alena | 50 | +| nwend ungvo ncomp utern daher sollt ejede infor matik erinu | 100 | +| ndjed erinf ormat ikerk enntn isseu eberd iewes entli chena | 150 | +| lgori thmis chenw erkze ugeha benue berst ruktu rendi eeser | 200 | +| laube ndate neffi zient zuorg anisi erenu ndauf zufin denue | 250 | +| berha eufig benut zteal gorit hmenu ndueb erdie stand ardte | 300 | +| chnik enmit denen manal gorit hmisc hepro bleme model liere | 350 | +| nvers tehen undlo esenk ann | + +Mit Wortzwischenräumen und Satzzeichen: +Algorithmen bilden das Herzstück jeder nichttrivialen Anwendung von Computern. Daher sollte jede Informatikerin und jeder Informatiker Kenntnisse über die wesentlichen algorithmischen Werkzeuge haben: über Strukturen, die es erlauben, Daten effizient zu organisieren und aufzufinden, über häufig benutzte Algorithmen und über die Standardtechniken, mit denen man algorithmische Probleme modellieren, verstehen und lösen kann. + +Bemerkungen: +- (i) Der Test funktioniert nur gut, wenn die Schlüssellänge s gering im Verhältnis zur Chiffretextlänge l ist. +- (ii) Um ihn anwenden zu können, muss die Klartextsprache bekannt sein. +- (iii) Der Test kann auch in der viel allgemeineren Situation benutzt werden, in der Schlüssel nicht s Verschiebungen, sondern s beliebige Substitutionschiffren auf $X$ bestimmen (z.B. $X=Y$ und Schlüssel ist Tupel($\pi_0,...,\pi_{s-1}$) von Permutationen von $X$). + +Was passiert im Extremfall $s=l$? +- Grundsätzlich hat man dann ein informationstheoretisch sicheres one-time pad vor sich... +- ... aber nur dann, wenn die Schlüssel gleichverteilt gewählt werden. Wenn der Schlüssel selbst ein deutscher Text ist (z.B. ein Textstück aus einem Buch), so weist der Chiffretext wieder statistische Merkmale auf, die zum Brechen ausgenutzt werden können. (Beispiel: Wenn Schlüssel und Klartext beides deutsche Texte sind, werden ca. $7,6%$ der Buchstaben mit sich selbst verschlüsselt, d.h. Chiffretextbuchstabe$= 2 *$ Klartextbuchstabe modulo 26.) + +Effektive Verfahren der Schlüsselverlängerung (die aber keine informationstheoretische Sicherheit bringen): +- Autokey-Vigenère: Schlüssel k, Klartext m. Dann wird klassische Vigenère-Chiffre mit Schlüssel km auf m angewendet. +- Pseudozufallszahlen: Geheimer Schlüssel ist seed eines (Pseudo-)Zufallszahlengenerators, mit dem eine lange Schlüsselfolge $k_0,...,k_{l-1}$ erzeugt wird. + +### Koinzidenzindex und Friedman-Methode +Wir betrachten noch eine andere interessante Methode zur Abschätzung der Schlüssellänge, die bei der Verwendung einer Vigenère-Chiffre oder anderen Substitutionschiffren mit fester Schlüssellänge s helfen können, diese zu ermitteln. Die Methode beruht darauf, dass die Buchstabenhäufigkeiten (zu einer gegebenen Sprache) fest stehen und sich bei der Verschlüsselung mit einer einfachen Substitutionschiffre nicht ändert. Ebenso ändert sich nicht die Wahrscheinlichkeit, bei der zufälligen Wahl eines Buchstabenpaars zwei identische Buchstaben zu erhalten. Die Methode stammt von William F. Friedman (1891, 1969), einem amerikanischen Kryptographen. + +Sei $x=x_0...x_{l-1}$ ein Klartext, sei $y=y_0...y_{l-1}$ der zugehörige Chiffretext, bei $s=1$ (an jeder Stelle derselbe Schlüssel). Seien $n_0,...,n_{25}$ die Anzahlen der Buchstaben $a,...,z$ in $x,n′_0,...,n′_25$ die in $y$. Wir wählen zufällig ein Paar von zwei Positionen in x (ohne ,,Zurücklegen''). Dafür gibt es $\binom{l}{2}$ Möglichkeiten. Genau $\binom{n_i}{2}$ viele davon führen dazu, dass man zweimal den Buchstaben Nummer i zieht, und $\sum_{0\geq i<26}\binom{n_i}{2}$ viele führen dazu, dass man an den beiden Positionen denselben Buchstaben sieht. Wir setzen $IC(x):=\frac{\sum_{0\geq i<26}\binom{n_i}{2}}{\binom{l}{2}}=\frac{\sum_{0\leq i<26}n_i(n_i-1)}{l(l-1)}$. +Diese Zahl nennt man den Koinzidenzindex von x. Sie ist die Wahrscheinlichkeit dafür, dass an den beiden zufällig gewählten Positionen der selbe Buchstabe steht. Weil die Verschlüsselung auf den Buchstaben eine Bijektion ist, also sich die vorkommenden Häufigkeiten durch die Verschlüsselung nicht ändern, gilt für $IC(y):=\frac{\sum_{0\geq i<26} n′_i(n′_i -1)}{l(l-1)}$ die Gleichung $IC(x)=IC(y)$. +Für lange Texte mit (sprachtypischer) Häufigkeitsverteilung der Buchstaben nähert sich $IC(x)$ einem bestimmten Wert an. Wenn $p_i$ die Häufigkeit von Buchstabe i in der verwendeten Sprache ist, wird für lange Texte x die Näherung $\frac{n_i}{l}\approx\frac{n_i-1}{l-1}\approx p_i$ gelten, also $IC(x)\approx \sum_{0\geq i<26} p^2_i$ sein. Die Summe $\sum_{0\geq i<26} p^2_i$ hat beispielsweise einen Wert von etwa $0,076$ für deutsche und $0,066$ für englische Texte. Wenn (in einer fiktiven Sprache) jeder Buchstabe dieselbe Wahrscheinlichkeit hat, ist $\sum_{0\geq i<26} p^2_i= 26*(\frac{1}{26})^2=\frac{1}{26}\approx 0,0385$; dies ist zugleich der minimal mögliche Wert. + +Für die Ermittlung eines Schätzwertes für die Schlüssellänge s gehen wir wie folgt vor. Wir nehmen an, die zugrunde liegende Sprache ist Deutsch. Wir berechnen zunächst $IC(y)$ für den Chiffretext y. Die unbekannte Schlüssellänge nennen wir s. Dann berechnen wir eine Näherung für $IC(y)$, auf eine zweite Weise. Dies wird uns eine (Näherungs-)Gleichung für s liefern. + +Wir überlegen: Bilde die Teilwörter $y^0,...,y^{s-1}$ wie in Abschnitt 1.4, jedes mit der Länge $\frac{l}{s}$. Innerhalb jedes Teilworts kommen Kollisionen ebenso häufig vor wie in einem gewöhnlichen Text mit nur einem Schlüssel, also erwarten wir zusammen $\binom{l/s}{2} IC(y^0)+...+\binom{l/s}{2} IC(y^{s-1})\approx s\binom{l/s}{2}* 0,076 = \frac{1}{2}l(l/s-1)* 0,076$ viele ,,Kollisionen'' (Paare identischer Chiffretextbuchstaben) aus den einzelnen Teilwörtern. +Zwischen zwei Teilwörtern $y^u$ und $y^v$ erwarten wir $(l/s)^2*261\approx 0,0385(l/s)^2$ Kollisionen, aus allen $\binom{s}{2}$ Paaren von Teilwörtern zusammen also $\binom{s}{2} 0,0385(l/s)^2 =\frac{s(s-1)}{2}* 0,0385(l/s)^2 =\frac{1}{2} *0,0385 l^2 (1-\frac{1}{s})$ viele. Zusammen ist die erwartete Anzahl an Kollisionen in y gleich $\frac{1}{2}l(0,076(l/s-1) + 0,0385 l(1-\frac{1}{s}))$. +Diese Zahl sollte näherungsweise gleich $\frac{1}{2}l(l-1)IC(y)$ sein. Wir können die resultierende Gleichung $(l-1)IC(y) = 0,076(l/s-1) + 0,0385 l(1-\frac{1}{s})$ nach s auflösen und erhalten: $s\approx \frac{(0,076-0,0385)l}{(l-1)IC(y)-0,0385l+0,076}$. (Wenn man anstelle der Konstanten $0,076$ den Wert $0,066$ einsetzt, erhält man die entsprechende Formel für englischsprachige Texte.) +Eine tatsächliche Durchführung des Verfahrens mit Chiffretexten wie im vorigen Kapitel erfordert viel Geduld (oder den Einsatz eines Computers). + +Beim ,,venezianischen'' Chiffretext EYRYC...UYR von oben ergibt sich: +| $a_i$ | 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 | +| --- |--- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | +| $n′_i$ | 8 | 12 | 13 | 2 | 18 | 25 | 7 | 19 | 20 | 14 | 8 | 15 | 16 | 7 | 12 | 8 | 3 | 15 | 25 | 10 | 19 | 41 | 13 | 11 | 19 | 8 | + +Dies liefert $IC(y)\approx 0,048024$ und $l=368$. Damit erhalten wir $s\approx\frac{0,0375*368}{367 *0,048024-0,0385 *368+0,076}\approx 3,9$. +Das ist nicht zu nahe am tatsächlichen Wert 5, aber auch nicht ungeheuer weit weg. (Die Formel reagiert sehr empfindlich auf kleine Änderungen in $IC(y)$. Mit $IC(y)=0,05$ ergibt sich $s\approx 3,24$, mit $IC(y)=0,046$ ergibt sich $s\approx 4,95$.) + diff --git a/Network Security.md b/Network Security.md index 1a48f77..930b477 100644 --- a/Network Security.md +++ b/Network Security.md @@ -34,10 +34,44 @@ - [Der Stromchiffre-Algorithmus RC4](#der-stromchiffre-algorithmus-rc4) - [KASUMI](#kasumi) - [KASUMI - Sicherheitsdiskussion](#kasumi---sicherheitsdiskussion) -- [Grundlagen der Kryptographie](#grundlagen-der-kryptographie-1) -- [Symmetrische Kryptographie](#symmetrische-kryptographie-1) - [Asymmetrische Kryptographie](#asymmetrische-kryptographie) + - [Einige mathematische Hintergründe](#einige-mathematische-hintergründe) + - [Der RSA Public Key Algorithmus](#der-rsa-public-key-algorithmus) + - [Einige weitere mathematische Hintergründe](#einige-weitere-mathematische-hintergründe) + - [Diffie-Hellman-Schlüsselaustausch](#diffie-hellman-schlüsselaustausch) + - [ElGamal Algorithmus](#elgamal-algorithmus) + - [Elliptische Kurven Kryptographie](#elliptische-kurven-kryptographie) + - [Gruppenelemente](#gruppenelemente) + - [Punktaddition](#punktaddition) + - [Grundlagen des ECC - Algebraische Addition](#grundlagen-des-ecc---algebraische-addition) + - [Multiplikation](#multiplikation) + - [Kurven über $\mathbb{Z}_p$](#kurven-über-mathbbz_p) + - [Berechnen Sie die y-Werte in $\mathbb{Z}_p$](#berechnen-sie-die-y-werte-in-mathbbz_p) + - [Addition und Multiplikation in $\mathbb{Z}_p$](#addition-und-multiplikation-in-mathbbz_p) + - [Foundations of ECC - Größe der erzeugten Gruppen](#foundations-of-ecc---größe-der-erzeugten-gruppen) + - [ECDH](#ecdh) + - [EC-Version des ElGamal-Algorithmus](#ec-version-des-elgamal-algorithmus) + - [Sicherheit](#sicherheit) + - [Weitere Anmerkungen](#weitere-anmerkungen) + - [Schlussfolgerung](#schlussfolgerung) - [Modifikationsprüfwerte](#modifikationsprüfwerte) + - [Motivation](#motivation) + - [Kryptographische Hash-Funktionen](#kryptographische-hash-funktionen) + - [Nachrichten-Authentifizierungs-Codes (MAC)](#nachrichten-authentifizierungs-codes-mac) + - [Ein einfacher Angriff gegen einen unsicheren MAC](#ein-einfacher-angriff-gegen-einen-unsicheren-mac) + - [Anwendungen für kryptographische Hash-Funktionen und MACs](#anwendungen-für-kryptographische-hash-funktionen-und-macs) + - [Angriffe basierend auf dem Geburtstagsphänomen](#angriffe-basierend-auf-dem-geburtstagsphänomen) + - [Übersicht über die gebräuchlichen MDCs](#übersicht-über-die-gebräuchlichen-mdcs) + - [Gemeinsame Struktur von kryptografischen Hash-Funktionen](#gemeinsame-struktur-von-kryptografischen-hash-funktionen) + - [Der Message Digest 5](#der-message-digest-5) + - [Der sichere Hash-Algorithmus SHA-1](#der-sichere-hash-algorithmus-sha-1) + - [Der sichere Hash-Algorithmus SHA-3](#der-sichere-hash-algorithmus-sha-3) + - [Cipher Block Chaining Message Authentication Codes](#cipher-block-chaining-message-authentication-codes) + - [Konstruktion eines MAC aus einem MDC](#konstruktion-eines-mac-aus-einem-mdc) + - [Authentifizierte Verschlüsselung mit zugehörigen Daten (AEAD) Modi](#authentifizierte-verschlüsselung-mit-zugehörigen-daten-aead-modi) + - [Galois/Zähler-Modus (GCM) [MV04]](#galoiszähler-modus-gcm-mv04) + - [Kleiner Exkurs: Rechenoperationen in $GF(2^n)$](#kleiner-exkurs-rechenoperationen-in-gf2n) + - [SpongeWrap](#spongewrap) - [Zufallszahlengenerierung](#zufallszahlengenerierung) - [Kryptographische Protokolle](#kryptographische-protokolle) - [Sichere Gruppenkommunikation](#sichere-gruppenkommunikation) @@ -133,8 +167,6 @@ Diese Bedrohungen werden oft kombiniert, um einen Angriff durchzuführen! | Verfügbarkeit | x | | x | x | | | x | | | Kontrollierter Zugriff | x | | x | | | x | | - - ## Analyse der Netzwerksicherheit - Um geeignete Gegenmaßnahmen gegen Bedrohungen ergreifen zu können, müssen diese für eine gegebene Netzkonfiguration angemessen bewertet werden. - Daher ist eine detaillierte Netzsicherheitsanalyse erforderlich, die @@ -216,7 +248,6 @@ Diese Bedrohungen werden oft kombiniert, um einen Angriff durchzuführen! - **Nicht-Abstreitbarkeit (Non Repudiation)** - Schützt davor, dass an einem Kommunikationsaustausch beteiligte Entitäten später fälschlicherweise abstreiten können, dass der Austausch stattgefunden hat - ## Sicherheitsunterstützende Mechanismen - Allgemeine Mechanismen - Schlüsselverwaltung: Alle Aspekte des Lebenszyklus von kryptografischen Schlüsseln @@ -461,7 +492,6 @@ Output-Feedback-Modus (OFB) - Es ist für einen Angreifer möglich, bestimmte Bits des Klartextes zu manipulieren - ![](Assets/NetworkSecurity-output-feedback-mode.png) - Algorithmus-Übersicht - Datenverschlüsselungsstandard (DES) - Alter amerikanischer Standard aus den 70er Jahren @@ -531,7 +561,6 @@ Geschichte - Nach der letzten Runde führt DES einen 32-Bit-Tausch und die inverse Anfangspermutation durch - InverseInitialPermutation($L_0||R_0$) = InverseInitialPermutation(InitialPermutation(Klartext)) = Klartext - ### DES - Sicherheit - Schwächen der Schlüssel - Schwache Schlüssel: Vier Schlüssel sind schwach, da sie Unterschlüssel erzeugen, die entweder alle 0 oder alle 1 enthalten. @@ -703,10 +732,872 @@ Standardisierte AES-Konfigurationen - Stromchiffre basierend auf LFSR, kann in 7.500 ASIC-Gattern implementiert werden - Aber auch anfällig für verwandte Schlüsselangriffe [KY11]. -# Grundlagen der Kryptographie -# Symmetrische Kryptographie # Asymmetrische Kryptographie +Eine vorherige Beschäftigung mit der diskreten Mathematik wird dem Leser jedoch helfen, die hier vorgestellten Konzepte zu verstehen.'' E. Amoroso in einem anderen Zusammenhang [Amo94] + +- Allgemeine Idee: + - Verwenden Sie zwei verschiedene Schlüssel $-K$ und $+K$ für die Ver- und Entschlüsselung + - Bei einem zufälligen Chiffretext $c=E(+K, m)$ und $+K$ sollte es nicht möglich sein, $m = D(-K, c) = D(-K, E(+K, m))$ zu berechnen. + - Dies impliziert, dass die Berechnung von $-K$ bei $+K$ nicht möglich sein sollte. + - Der Schlüssel $-K$ ist nur einer Entität A bekannt und wird A's privater Schlüssel $-K_A$ genannt + - Der Schlüssel $+K$ kann öffentlich bekannt gegeben werden und wird A's öffentlicher Schlüssel $+K_A$ genannt +- Anwendungen: + - Verschlüsselung: + - Wenn B eine Nachricht mit dem öffentlichen Schlüssel $+K_A$ von A verschlüsselt, kann er sicher sein, dass nur A sie mit $-K_A$ entschlüsseln kann. + - Signieren: + - Wenn A eine Nachricht mit seinem eigenen privaten Schlüssel $-K_A$ verschlüsselt, kann jeder diese Signatur verifizieren, indem er sie mit A's öffentlichem Schlüssel $+K_A$ entschlüsselt + - Achtung! Entscheidend ist, dass jeder nachprüfen kann, dass er wirklich den öffentlichen Schlüssel von A kennt und nicht den Schlüssel eines Gegners! +- Entwurf von asymmetrischen Kryptosystemen: + - Schwierigkeit: Finde einen Algorithmus und eine Methode, zwei Schlüssel $-K$, $+K$ so zu konstruieren, dass es nicht möglich ist, $E(+K, m)$ mit der Kenntnis von $+K$ zu entschlüsseln + - Beschränkungen: + - Die Schlüssellänge sollte ,,überschaubar'' sein + - Verschlüsselte Nachrichten sollten nicht beliebig länger sein als unverschlüsselte Nachrichten (wir würden einen kleinen konstanten Faktor tolerieren) + - Ver- und Entschlüsselung sollten nicht zu viele Ressourcen verbrauchen (Zeit, Speicher) + - Grundlegende Idee: Man nehme ein Problem aus dem Bereich der Mathematik/Informatik, das schwer zu lösen ist, wenn man nur $+K$ kennt, aber leicht zu lösen, wenn man $-K$ kennt + - Knapsack-Probleme: Grundlage der ersten funktionierenden Algorithmen, die sich leider fast alle als unsicher erwiesen haben + - Faktorisierungsproblem: Grundlage des RSA-Algorithmus + - Diskreter-Logarithmus-Problem: Grundlage von Diffie-Hellman und ElGamal + +## Einige mathematische Hintergründe +- Sei $\mathbb{Z}$ die Menge der ganzen Zahlen, und $a,b,n\in\mathbb{Z}$ +- Wir sagen, $a$ teilt $b(,,a|b'')$, wenn es eine ganze Zahl $k\in\mathbb{Z}$ gibt, so dass $a\mal k=b$ +- $a$ ist prim, wenn es positiv ist und die einzigen Teiler von a $1$ und $a$ sind. +- $r$ ist der Rest von a geteilt durch $n$, wenn $r=a-\lfloor a / n \rfloor\times n$, wobei $\lfloor x\rfloor$ die größte ganze Zahl kleiner oder gleich $x$ ist. + - Beispiel: 4 ist der Rest von 11 geteilt durch 7 als $4=11-\lfloor 11/7\rfloor\times 7$ + - Wir können dies auch anders schreiben: $a=q\mal n + r$ mit $q=\lfloor a/n\rfloor$ +- Für den Rest $r$ der Division von a durch n schreiben wir $a\ MOD\ n$ +- Wir sagen, b ist kongruent $a\ mod\ n$, wenn es bei der Division durch n den gleichen Rest wie a hat. Also teilt n $(a-b)$, und wir schreiben $b\equiv a\ mod\ n$ + - Beispiele: $4\equiv 11\ mod\ 7$, $25\equiv 11\ mod\ 7$, $11\equiv 25\ mod\ 7$, $11\equiv 4\ mod\ 7$, $-10\equiv 4\ mod\ 7$ +- Da der Rest r der Division durch n immer kleiner als n ist, stellt man manchmal die Menge $\{x\ MOD\ n | x\in\mathbb{Z}\}$ durch Elemente der Menge $\mathbb{Z}_n=\{0, 1, ..., n-1\}$ dar + +| Eigenschaft | Ausdruck | +| ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------- | +| Kommutativgesetze + | $(a + b)\ MOD\ n = (b + a)\ MOD\ n$ | +| $(a \times b)\ MOD\ n = (b \times a)\ MOD\ n$ | +| Assoziativgesetze | $[(a + b) + c]\ MOD\ n = [a + (b + c)]\ MOD\ n$ | +| $[(a \times b) \times c]\ MOD\ n = [a \times (b \times c)]\ MOD\ n$ | +| Distributivgesetz | $[a \times (b + c)]\ MOD\ n = [(a \times b) + (a \times c)]\ MOD\ n$ | +| Identitäten | $(0 + a)\ MOD\ n = a\ MOD\ n$ | +| $(1 \times a)\ MOD\ n = a\ MOD\ n$ | +| Inverse | $\forall a \in \mathbb{Z}n: \exists (-a) \in \mathbb{Z}n : a + (-a) \equiv 0\ mod\ n$ | +| $p is prime \Rightarrow \forall a \in \mathbb{Z}p: \exists (a-1) \in \mathbb{Z}p: a \times (a-1) \equiv 1\ mod\ p$ | + +Größter gemeinsamer Teiler +- $c = gcd(a, b) :\Leftrightarrow ( c | a) \wedge ( c | b) \wedge [\forall d: ( d | a ) \wedge ( d | b) \Rightarrow ( d | c )]$ und $gcd(a, 0 ) : = | a |$ +- Der gcd-Rekursionssatz : + - $\für alle a, b \in \mathbb{Z}^+: gcd(a, b) = gcd(b, a\ MOD\ b)$ + - Beweis: + - Da $gcd(a, b)$ sowohl a als auch b teilt, teilt es auch jede Linearkombination von ihnen, insbesondere $(a- \lfloor a / b \rfloor \times b) = a\ MOD\ b$, also $gcd(a, b) | gcd(b, a\ MOD\ b)$ + - Da $gcd(b, a\ MOD\ b)$ sowohl b als auch $a\ MOD\ b$ teilt, teilt es auch jede Linearkombination von beiden, insbesondere $\lfloor a / b \rfloor \times b + (a\ MOD\ b) = a$, also $gcd(b, a\ MOD\ b) | gcd(a, b)$ +- Euklidischer Algorithmus: + - Der euklidische Algorithmus berechnet aus a, b $gcd(a, b)$ + ```cpp + int Euclid(int a, b){ + if (b = 0) { return(a); } + {return(Euclid(b, a\ MOD\ b);} + } + ``` +- Erweiterter euklidischer Algorithmus: + - Der Algorithmus ExtendedEuclid berechnet für a, b d, m, n so, dass: $d = gcd(a, b) = m \times a + n \times b$ + ```cpp + struct{int d, m, n} ExtendedEuclid(int a, b) + { int d, d', m, m', n, n'; + if (b = 0) {return(a, 1, 0); } + (d', m', n') = ExtendedEuclid(b, a MOD b); + (d, m, n) = (d', n', m' - \lfloor a / b \rfloor \times n'); + return(d, m, n); } + ``` + - Beweis: (durch Induktion) + - Grundfall $(a,0): gcd(a, 0) = a = 1 \Zeiten a + 0 \Zeiten 0$ + - Induktion von $(b, a\ MOD\ b)$ auf $(a, b)$: + - ExtendedEuclid berechnet $d', m', n'$ korrekt (Induktionshypothese) + - $d=d'=m'\Zeiten b+n'\Zeiten (a\ MOD\ b)=m'\Zeiten b+n'\Zeiten(a-\lfloor a/b\rfloor\Zeiten b)=n'\Zeiten a+(m'-\lfloor a/b\rfloor\Zeiten n')\Zeiten b$ + - Die Laufzeit von $Euclid(a, b)$ und $ExtendedEuclid(a, b)$ ist von $O(log\ b)$ + - Beweis: siehe [Cor90a], Abschnitt 33. + - Lemma 1: Sei $a,b\in\mathbb{N}$ und $d=gcd(a,b)$. Dann gibt es $m,n\in\mathbb{N}$ so, dass: $d=m\mal a+n \mal b$ +- Theorem 1 (Euklid): Wenn eine Primzahl das Produkt zweier ganzer Zahlen teilt, dann teilt sie mindestens eine der ganzen Zahlen: $p|(a\mal b)\Rechtspfeil (p|a) \vier (p|b)$ + - Der Beweis: Es sei $p|(a\mal b)$ + - Wenn $p|a$ dann sind wir fertig. + - Wenn nicht, dann $gcd(p,a) = 1 \Rightarrow\existiert m, n\in\mathbb{N}:1=m\mal p+n\mal a \Leftrightarrow b=m\mal p \mal b + n \mal a \mal b$ + - Da $p|(a\mal b)$, teilt p beide Summanden der Gleichung und somit auch die Summe, die b ist +- Theorem 2 (Fundamentalsatz der Arithmetik): Die Faktorisierung in Primzahlen ist bis zur Ordnung eindeutig. + - Der Beweis: + - Wir werden zeigen, dass jede ganze Zahl mit einer nicht eindeutigen Faktorisierung einen eigenen Teiler mit einer nicht eindeutigen Faktorisierung hat, was zu einem klaren Widerspruch führt, wenn wir schließlich auf eine Primzahl reduziert haben. + - Nehmen wir an, dass n eine ganze Zahl mit einer nicht eindeutigen Faktorisierung ist: $n=p_1\mal p_2\mal ...\mal p_r=q_1 \mal q_2\mal ... \times q_s$. Die Primzahlen sind nicht notwendigerweise verschieden, aber die zweite Faktorisierung ist nicht einfach eine Umordnung der ersten. Da $p_1$ n dividiert, dividiert es auch das Produkt $q_1\mal q_2\mal ... \times q_s$. Durch wiederholte Anwendung von Satz 1 zeigen wir, dass es mindestens ein $q_i$ gibt, das durch $p_1$ teilbar ist. Gegebenenfalls ordnen wir die $q_i$'s so, dass es $q_1$ ist. Da sowohl $p_1$ als auch $q_1$ Primzahlen sind, müssen sie gleich sein. Wir können also durch $p_1$ dividieren und haben, dass $n/p_1$ eine nicht-eindeutige Faktorisierung hat. + - Wir verwenden Theorem 2, um die folgende Korollarie 1 zu beweisen + - Wenn $gcd(c,m)=1$ und $(a\mal c)\equiv(b\mal c)mod\ m$, dann $a\equiv b\ mod\ m$ + - Der Beweis: Da $(a\times c)\equiv(b\times c)mod\ m\Rightarrow\existiert n\in\mathbb{N}:(a\times c)-(b\times c)=n\times m$ + - $\Leftrightarrow ( a - b ) \Zeiten c = n \Zeiten m$ + - $\Leftrightarrow p_1\Zeiten ...\Zeiten p_i\Zeiten q_1\Zeiten ...\Zeiten q_j=r_1\Zeiten ...\Zeiten r_k\Zeiten s_1\Zeiten ...\Zeiten s_l$ + - Man beachte, dass die $p$'s, $q$'s, $r$'s und $s$'s Primzahlen sind und nicht verschieden sein müssen, aber da $gcd(c,m)=1$, gibt es keine Indizes g, h, so dass $q_g = s_h$. + - Wir können also die Gleichung fortlaufend durch alle q's teilen, ohne jemals ein $s$ zu ,,eliminieren'' und erhalten schließlich etwas wie $\Leftrightarrow p_1\mal ...\mal p_i=r_1\mal ...\mal r_o\mal s_1\mal ...\mal s_l$ (beachten Sie, dass es weniger r's geben wird) + - $\Leftrightarrow(a-b)=r_1\Zeiten ...\Zeiten r_o\Zeiten m\Rightarrow a \equiv b\ mod\ m$ + - Bezeichne $\phi(n)$ die Anzahl der positiven ganzen Zahlen, die kleiner als n und relativ zu n prim sind + - Beispiele: $\phi(4) = 2$, \phi(6)=2$, $\phi(7)=6$, $\phi(15)=8$ + - Wenn p eine Primzahl ist $\Rightarrow\phi(p)=p-1$ +- Theorem 3 (Euler): Seien n und b positive und relativ primäre ganze Zahlen, d.h. $gcd(n, b) = 1 \Rightarrow b \phi(n) \equiv 1\ mod\ n$ + - Beweis: + - Sei $t=\phi(n)$ und $a_1,...a_t$ seien die positiven ganzen Zahlen kleiner als $n$, die relativ zu $n$ prim sind. Definieren Sie $r_1,...,r_t$ als die Residuen von $b\mal a_1\ mod\ n , ..., b\mal a_t\ mod\ n$, d.h.: $b\mal a_i \equiv r_i\ mod\ n$. + - Beachten Sie, dass $i\not= j \Rightarrow r_i\not= r_j$. Wäre dies nicht der Fall, hätten wir $b\mal a_i\equiv b\mal a_j\ mod\ n$ und da $gcd(b,n)=1$, würde Korollar 1 $a_i\equiv a_j\ mod\ n$ implizieren, was nicht sein kann, da $a_i$ und $a_j$ per Definition verschiedene ganze Zahlen zwischen 0 und n sind + - Wir wissen auch, dass jedes $r_i$ relativ prim zu n ist, denn jeder gemeinsame Teiler k von $r_i$ und $n$ , d.h. $n=k\mal m$ und $r_i=p_i\mal k$, müsste auch $a_i$ teilen, + - da $b\mal a_i$gleich (p_i\mal k)\ mod\ (k\mal m)\Rightarrow\existiert s\in\mathbb{N}:(b\mal a_i)-(p_i\mal k)=s\mal k\mal m \Leftrightarrow (b\mal a_i)=s\mal k\mal m+(p_i\mal k)$ + - Da k jeden der Summanden auf der rechten Seite dividiert und k nicht durch b dividiert (n und b sind relativ prim), müsste es auch $a_i$ dividieren, das relativ prim zu n sein soll + - Somit ist $r_1, ...,r_t$ eine Menge von $\phi(n)$ verschiedenen ganzen Zahlen, die relativ prim zu $n$ sind. Das bedeutet, dass sie genau dasselbe sind wie $a_1,...a_t$, nur dass sie in einer anderen Reihenfolge stehen. Insbesondere wissen wir, dass $r_1\mal...\mal r_t=a_1\mal...\mal a_t$ + - Wir verwenden nun die Kongruenz $r_1\Zeiten...\Zeiten r_t\equiv b\Zeiten a_1\Zeiten...\Zeiten b\Zeiten a_t\ mod\ n$ + $\Leftrightarrow r_1\Zeiten...\Zeiten r_t\equiv b_t\Zeiten a_1\Zeiten...\Zeiten a_t\ mod\ n$ + $\Leftrightarrow r_1\Zeiten...\Zeiten r_t\equiv b_\Zeiten r_1\Zeiten...\Zeiten r_t\ mod\ n$ + - Da alle $r_i$ relativ prim zu $n$ sind, können wir Korollar 1 anwenden und durch ihr Produkt dividieren: $1\equiv b_t\ mod\ n \Leftrightarrow 1\equiv b\phi(n)\ mod n$ +- Satz 4 (Chinese Remainder Theorem): + - Seien $m_1,...,m_r$ positive ganze Zahlen, die paarweise relativ prim sind, + - d.h. $ganz i\not= j:gcd(m_i, m_j) = 1$. Seien $a_1,...,a_r$ beliebige ganze Zahlen. + - Dann gibt es eine ganze Zahl a derart, dass: + - $a\equiv a_1\ mod\ m_1$ + - $a\equiv a_2\ mod\ m_2$ + - ... + - $a\equiv a_r\ mod\ m_r$ + - Außerdem ist a eindeutig modulo $M := m_1\mal...\mal m_r$ + - Beweis: + - Für alle $i\in\{1,...,r\}$ definieren wir $M_i:=(M/m_i)\phi(m_i)$ + - Da $M_i$ per Definition relativ prim zu $m_i$ ist, können wir Theorem 3 anwenden und wissen, dass $M_i\equiv 1\ mod\ m_i$ + - Da $M_i$ durch $m_j$ für jedes $j\not= i$ teilbar ist, haben wir $\füralle j\not= i:M_i\equiv 0\ mod\ m_j$ + - Wir können nun die Lösung konstruieren, indem wir definieren: $a:= a_1\mal M_1+a_2\mal M_2+...+a_r\mal M_r$ + - Die beiden oben angeführten Argumente bezüglich der Kongruenzen der $M_i$ implizieren, dass a tatsächlich alle Kongruenzen erfüllt. + - Um zu sehen, dass a eindeutig modulo $M$ ist, sei b eine beliebige andere ganze Zahl, die die r Kongruenzen erfüllt. Da $a\equiv c\ mod\ n$ und $b\equiv c\ mod\ n \Rightarrow a \equiv b\ mod\ n$ haben wir $\für alle i\in\{1,...,r\}:a\equiv b\ mod\ m_i\Rightarrow\für alle i\in\{1,. ...,r\}:m_i|(a-b) \Rightarrow M|(a-b)$, da die $m_i$ paarweise relativ prim sind $\Leftrightarrow a\equiv b\ mod\ M$ +- Lemma 2: + - Wenn $gcd(m,n)=1$, dann ist $\phi(m\mal n)=\phi(m)\mal\phi(n)$ + - Der Beweis: + - Sei a eine positive ganze Zahl, die kleiner als und relativ prim zu $m\mal n$ ist. Mit anderen Worten: a ist eine der ganzen Zahlen, die von $\phi(m\mal n)$ gezählt werden. + - Betrachten Sie die Entsprechung $a\rightarrow(a\ MOD\ m, a\ MOD\ n)$. Die ganze Zahl a ist relativ prim zu m und relativ prim zu n (andernfalls würde sie $m \mal n$ teilen). Also ist $(a\ MOD\ m)$ relativ prim zu m und $(a\ MOD\ n)$ ist relativ prim zu n, da: $a=\lfloor a/m\rfloor\times m + (a\ MOD\ m)$, wenn es also einen gemeinsamen Teiler von $m$ und $(a\ MOD\ m)$ gäbe, würde dieser Teiler auch a teilen. Somit entspricht jede Zahl a, die durch $\phi(m\mal n )$ gezählt wird, einem Paar von zwei ganzen Zahlen $(a\ MOD\ m,a\ MOD\ n)$, wobei die erste durch $\phi(m)$ und die zweite durch $\phi(n)$ gezählt wird. + - Aufgrund des zweiten Teils von Satz 4 ist die Einzigartigkeit der Lösung $a\ mod\ (m\mal n)$ der simultanen Kongruenzen: + $a \equiv(a\ mod\ m)\ mod\ m$ + $a \equiv(a\ MOD\ n)\ mod\ n$ + können wir ableiten, dass verschiedene ganze Zahlen, die durch $\phi(m\mal n)$ gezählt werden, verschiedenen Paaren entsprechen: + - Um dies zu sehen, nehmen wir an, dass $a\not=b$, gezählt durch $\phi(m\mal n)$, demselben Paar $(a\ MOD\ m, a\ MOD\ n)$ entspricht. Dies führt zu einem Widerspruch, da b auch die Kongruenzen erfüllen würde: + $b\equiv (a\ MOD\ m)\ mod\ m$ + $b\equiv (a\ MOD\ n)\ mod\ n$ + aber die Lösung dieser Kongruenzen ist eindeutig modulo $(m \mal n)$ + - Daher ist $\phi(m \mal n)$ höchstens die Anzahl solcher Paare: $\phi(m \mal n)\leq \phi(m)\mal\phi(n)$ + - Betrachten wir nun ein Paar von ganzen Zahlen $(b,c)$, von denen eine mit $\phi(m)$ und die andere mit $\phi(n)$ gezählt wird: Mit Hilfe des ersten Teils von Satz 4 können wir eine einzige positive ganze Zahl a konstruieren, die kleiner als und relativ prim zu $m\times n$ ist: $a\equiv b\ mod\ m$ und $a\equiv c\ mod\ n$. Die Anzahl solcher Paare ist also höchstens $\phi(m \times n):\phi(m \times n)\leq\phi(m)\times\phi(n)$ + +## Der RSA Public Key Algorithmus +- Der RSA-Algorithmus wurde 1977 von R. Rivest, A. Shamir und L. Adleman [RSA78] erfunden und basiert auf Theorem 3. +- Seien $p, q$ verschiedene große Primzahlen und $n=p\times q$. Nehmen wir an, wir haben auch zwei ganze Zahlen e und d, so dass: $d\times e \equiv 1\ mod\ \phi(n)$ +- M sei eine ganze Zahl, die die zu verschlüsselnde Nachricht darstellt, wobei M positiv, kleiner als und relativ prim zu n ist. + - Beispiel: Verschlüsseln mit = 99, A = 10, B = 11, ..., Z = 35. Somit würde ,,HELLO'' als 1714212124 kodiert werden. Falls erforderlich, ist M in Blöcke kleinerer Nachrichten aufzuteilen: 17142 12124 +- Zum Verschlüsseln berechnen Sie: $E = M^e\ MOD\ n$ + - Dies kann mit dem Quadrat- und Multiplikationsalgorithmus effizient durchgeführt werden +- Zum Entschlüsseln berechnet man: $M'=E^d\ MOD\ n$ + - Da $d\times e\equiv 1\ mod\ \phi(n)\Rightarrow\existiert k\in\mathbb{Z}:(d\times e)-1=k\times\phi(n)\Leftrightarrow(d\times e)=k\times\phi(n)+1$ + - haben wir: $M'\equiv E^d\equiv M^{e\times d}\equiv M^{k\times\phi(n)+1}\equiv 1^k\times M\equiv M\ mod\ n$ +- Da $(d\times e)=(e\times d)$ funktioniert die Operation auch in umgekehrter Richtung, d.h. man kann mit d verschlüsseln und mit e entschlüsseln + - Diese Eigenschaft erlaubt es, die gleichen Schlüssel d und e zu verwenden: + - den Empfang von Nachrichten, die mit dem eigenen öffentlichen Schlüssel verschlüsselt wurden + - Senden von Nachrichten, die mit dem eigenen privaten Schlüssel signiert wurden +- So richten Sie ein Schlüsselpaar für RSA ein: + - Wählen Sie zufällig zwei Primzahlen $p$ und $q$ (mit jeweils 100 bis 200 Ziffern) + - Berechne $n=p\mal q,\phi(n)=(p-1)\mal (q-1)$ (Lemma 2) + - Wähle zufällig $e$, so dass $gcd(e,\phi(n))=1$ + - Berechne mit dem erweiterten euklidischen Algorithmus d und c, so dass: $e\mal d+\phi(n)\mal c = 1$, wobei zu beachten ist, dass dies impliziert, dass $e\mal d\equiv 1\ mod\ \phi(n)$ + - Der öffentliche Schlüssel ist das Paar $(e, n)$ + - Der private Schlüssel ist das Paar $(d, n)$ +- Die Sicherheit des Verfahrens liegt in der Schwierigkeit der Faktorisierung von $n=p\mal q$, da es einfach ist, $\phi(n)$ und dann $d$ zu berechnen, wenn $p$ und $q$ bekannt sind. +- In diesem Kurs wird nicht gelehrt, warum es schwierig ist, große n zu faktorisieren, da dies einen tiefen Einblick in die Mathematik erfordern würde. + - Wenn p und q bestimmte Eigenschaften erfüllen, sind die besten bekannten Algorithmen exponentiell zur Anzahl der Ziffern von n + - Bitte beachten Sie, dass es bei einer unglücklichen Wahl von p und q Algorithmen geben könnte, die effizienter faktorisieren können, und dass Ihre RSA-Verschlüsselung dann nicht mehr sicher ist: + - Daher sollten p und q ungefähr die gleiche Bitlänge haben und ausreichend groß sein + - $(p-q)$ sollte nicht zu klein sein + - Wenn man einen kleinen Verschlüsselungsexponenten, z.B. 3, wählen will, kann es zusätzliche Einschränkungen geben, z.B. $gcd(p-1, 3) = 1$ und $gcd(q-1,3)=1$ + - Die Sicherheit von RSA hängt auch davon ab, dass die erzeugten Primzahlen wirklich zufällig sind (wie jede Methode zur Schlüsselerzeugung bei jedem Algorithmus). + - Moral: Wenn Sie RSA selbst implementieren wollen, bitten Sie einen Mathematiker oder besser einen Kryptographen, Ihren Entwurf zu überprüfen. + +## Einige weitere mathematische Hintergründe +- Definition: endliche Gruppen + - Eine Gruppe ( S , \oplus) ist eine Menge S zusammen mit einer binären Operation \oplus, für die die + folgende Eigenschaften gelten: + - Geschlossenheit: Für alle a, b \in S , haben wir a \oplus b \in S + - Identität: Es gibt ein Element e \in S , so dass e \oplus a = a \oplus e = a für alle + a \in S + - Assoziativität: Für alle a, b, c \in S , gilt ( a \oplus b ) \oplus c = a \oplus ( b \oplus c ) + - Inversen: Für jedes a \in S , gibt es ein einziges Element b \in S , so dass + dass a \oplus b = b \oplus a = e + - Erfüllt eine Gruppe ( S , \oplus) das Kommutativgesetz \für alle a, b \in S : a \oplus b = b \oplus a + dann nennt man sie eine abelsche Gruppe + - Wenn eine Gruppe ( S , \oplus) nur eine endliche Menge von Elementen hat, d.h. |S| < \infty, dann wird sie + eine endliche Gruppe genannt +- Beispiele: + - $(\mathbb{Z}_n , +_n)$ + - mit $\mathbb{Z}_n:=\{[0]_n,[1]_n,...,[n-1]_n\}$ + - wobei $[a]_n:=\{b \in \mathbb{Z} | b \equiv a mod n\}$ und + - $+_n$ ist so definiert, dass $[a]_n+_n[b]_n=[a+b]_n$ + - eine endliche abelsche Gruppe ist. Für den Beweis siehe die Tabelle mit den Eigenschaften der modularen Arithmetik + - $(\mathbb{Z}^*_n , \times_n)$ + - mit $\mathbb{Z}^*_n :=\{[a]_n\in \mathbb{Z}_n | gcd(a,n)=1\}$, und + - $\times_n$ ist so definiert, dass $[a]_n\times_n [b]_n=[a\times b]_n$ + - eine endliche abelsche Gruppe ist. Man beachte, dass $\mathbb{Z}^*_n$ nur die Elemente von $\mathbb{Z}_n$ enthält, die eine multiplikative Inverse modulo n haben. Zum Beweis siehe Eigenschaften der modularen Arithmetik + - Beispiel: $\mathbb{Z}^*_{15}=\{[1]_{15},[2]_{15},[4]_{15},[7]_{15},[8]_{15},[11]_{15},[13]_{15},[14]_{15}\}$, als $1\times 1\equiv 1 mod 15$, $2 \Zeiten 8 \equiv 1 mod 15$, $4 \Zeiten 4 \equiv 1 mod 15$, $7 \Zeiten 13 \equiv 1 mod 15$, $11 \Zeiten 11 \equiv 1 mod 15$, $14 \Zeiten 14 \equiv 1 mod 15$ +- Wenn klar ist, dass es sich um $(\mathbb{Z}_n, +_n)$ oder $(\mathbb{Z}^*_n, \times_n)$ handelt, werden Äquivalenzklassen $[a]_n$ oft durch ihre repräsentativen Elemente a dargestellt und $+_n$ und $\times_n$ durch $+$ bzw. $\times$ bezeichnet. + - Definition: endliche Felder + - Ein Feld $(S,\oplus, \otimes)$ ist eine Menge S zusammen mit zwei Operationen $\oplus$, $\otimes$, so dass + - $(S,\oplus)$ und $(S\backslash\{e_{\oplus}\},\otimes)$ sind kommutative Gruppen, d.h. nur das Identitätselement bezüglich der Operation $\oplus$ muss kein Inverses bezüglich der Operation $\otimes$ haben + - Für alle $a,b,c\in S$ haben wir ein $\otimes(b\oplus c)=(a\otimes b)\oplus(a\otimes c)$ + - Wenn $|S|<\infty$ dann heißt $(S,\oplus,\otimes)$ ein endliches Feld +- Beispiel: $(\mathbb{Z}_p, +_p, \times_p)$ ist ein endliches Feld für jede Primzahl p +- Definition: Primitive Wurzel, Generator + - Sei $(S,\circ)$ eine Gruppe, $g\in S$ und $g^a:=g\circ g\circ...\circ g$ (a mal mit $a\in\mathbb{Z}^+$) + - Dann heißt g eine primitive Wurzel oder ein Generator von $(S,\circ):\Leftrightarrow\{g^a|1\leq a\leq |S|\}=S$ + - Beispiele: + - 1 ist eine primitive Wurzel von $(\mathbb{Z}_n, +_n)$ + - 3 ist eine Primitivwurzel von $(\mathbb{Z}^*_7, \times_7)$ + - Nicht alle Gruppen haben Primitivwurzeln, und diejenigen, die sie haben, nennt man zyklische Gruppen +- Theorem 5: + - $(\mathbb{Z}^*_n, \times_n)$ hat eine primitive Wurzel $\Leftrightarrow n\in\{2,4,p,2\times p^e\}$, wobei p eine ungerade Primzahl ist und $e\in\mathbb{Z}^+$ +- Theorem 6: + - Wenn $(S,\circ)$ eine Gruppe ist und $b\in S$, dann ist $(S',\circ)$ mit $S'=\{b^a|a\in\mathbb{Z}^+\}$ ebenfalls eine Gruppe. + - Da $S'\subseteq S, heißt (S',\circ)$ eine Untergruppe von $(S,\circ)$ + - Wenn b eine Urwurzel von $(S,\circ)$ ist, dann ist $S'=S$ +- Definition: Ordnung einer Gruppe und eines Elements + - Sei $(S,\circ)$ eine Gruppe, $e\in S$ ihr Identitätselement und $b\in S$ irgendein Element von $S$: + - Dann heiße $|S|$ die Ordnung von $(S,\circ)$ + - Sei $c\in\mathbb{Z}^+$ das kleinste Element, so dass $b^c=e$ ist (falls ein solches c existiert, falls nicht, setze $c=\infty$). Dann wird c die Ordnung von b genannt. +- Theorem 7 (Lagrange): + - Ist G eine endliche Gruppe und H eine Untergruppe von G , so ist $|H|$ Teiler von $|G|$. + - Wenn also $b in G$ ist, dann ist die Ordnung von b Teiler von $|G|$. +- Theorem 8: + - Ist G eine zyklische endliche Gruppe der Ordnung n und d ist Teiler von n, dann hat G genau $\phi(d)$ Elemente der Ordnung $d$. Insbesondere hat G $\phi(n)$-Elemente der Ordnung n. +- Die Theoreme 5, 7 und 8 sind die Grundlage des folgenden Algorithmus, der eine zyklische Gruppe $\mathbb{Z}^*_p$ und eine Urwurzel g davon findet: + - Man wählt eine große Primzahl q, so dass $p=2q+1$ eine Primzahl ist. + - Da $p$ prim ist, besagt Satz 5, dass $\mathbb{Z}^*_p$ zyklisch ist. + - Die Ordnung von $\mathbb{Z}^*_p$ ist $2\-mal q$ und $\phi(2\-mal q)=\phi(2)\-mal\phi(q)=q-1$, da $q$ prim ist. + - Die Wahrscheinlichkeit, dass eine Primitivwurzel zufällig ausgewählt wird, beträgt also $(q-1)/2q \ca. 1/2$. + - Um effizient zu prüfen, ob ein zufällig gewähltes g eine Urwurzel ist, müssen wir nur prüfen, ob $g^2\equiv 1 mod p$ oder $g^q\equiv 1 mod p$ ist. Wenn nicht, dann muss seine Ordnung $|\mathbb{Z}^*_p|$ sein, da Satz 7 besagt, dass die Ordnung von g $|\mathbb{Z}^*_p|$ teilen muss +- Definition: diskreter Logarithmus + - Sei p eine Primzahl, g eine Urwurzel von $(\mathbb{Z}^*_p,\times_p)$ und c ein beliebiges Element von $\mathbb{Z}^*_p$. Dann gibt es z so, dass: $g^z\equiv c mod p$ + - z wird der diskrete Logarithmus von c modulo p zur Basis g genannt + - Beispiel 6 ist der diskrete Logarithmus von 1 modulo 7 zur Basis 3 als $3^6\equiv 1 mod 7$ + - Die Berechnung des diskreten Logarithmus z bei gegebenem g, c und p ist ein rechnerisch schwieriges Problem, und die asymptotische Laufzeit der besten bekannten Algorithmen für dieses Problem ist exponentiell zur Bitlänge von p + +## Diffie-Hellman-Schlüsselaustausch +- Der Diffie-Hellman-Schlüsselaustausch wurde erstmals in der bahnbrechenden Arbeit [DH76] veröffentlicht, in der auch die Grundidee der asymmetrischen Kryptographie vorgestellt wurde +- Der DH-Austausch in seiner Grundform ermöglicht es zwei Parteien A und B, sich über einen öffentlichen Kanal auf ein gemeinsames Geheimnis zu einigen: + - Öffentlicher Kanal bedeutet, dass ein potentieller Angreifer E (E steht für Eavesdropper) alle zwischen A und B ausgetauschten Nachrichten lesen kann + - Es ist wichtig, dass A und B sicher sein können, dass der Angreifer nicht in der Lage ist, Nachrichten zu verändern, da er in diesem Fall einen Man-in-the-Middle-Angriff starten könnte + - Die mathematische Grundlage für den DH-Austausch ist das Problem, diskrete Logarithmen in endlichen Feldern zu finden. + - Der DH-Austausch ist kein asymmetrischer Verschlüsselungsalgorithmus, wird aber dennoch hier vorgestellt, da er gut zum mathematischen Charakter dieser Vorlesung passt... +- Wenn Alice (A) und Bob (B) sich auf ein gemeinsames Geheimnis s einigen wollen und ihr einziges Kommunikationsmittel ein öffentlicher Kanal ist, können sie wie folgt vorgehen: + - A wählt eine Primzahl p, eine primitive Wurzel g von $\mathbb{Z}^*_p$ und eine Zufallszahl q: + - A und B können sich vor der Kommunikation auf die Werte p und g einigen, oder A wählt p und g und sendet sie mit seiner ersten Nachricht + - A berechnet $v=g^q\ MOD\ p$ und sendet an $B:\{p,g,v\}$ + - B wählt eine Zufallszahl r: + - B berechnet $w=g^r\ MOD\ p$ und sendet an $A:\{p,g,w\}$ (oder einfach $\{w\}$) + - Beide Seiten errechnen das gemeinsame Geheimnis: + - A errechnet $s=w^q\ MOD\ p$ + - B errechnet $s'=v^r\ MOD\ p$ + - Da $g^{q\mal r}\ MOD\ p = g^{r \mal q}\ MOD\ p$ ist, gilt: $s=s'$ + - Ein Angreifer Eve, der den öffentlichen Kanal abhört, kann das Geheimnis s nur berechnen, wenn er entweder q oder r berechnen kann, die die diskreten Logarithmen von v, w modulo p zur Basis g sind. +- Wenn der Angreifer Eve in der Lage ist, Nachrichten auf dem öffentlichen Kanal zu verändern, kann er einen Man-in-the-Middle-Angriff starten: + - Eve generiert zwei Zufallszahlen $q'$ und $r'$: Eve berechnet $v'=g^{q'}\ MOD\ p$ und $w'=g^{r'}\ MOD\ p$ + - Wenn A $\{p,g,v\}$ sendet, fängt sie die Nachricht ab und sendet an $B:\{p,g,v'\}$ + - Wenn B $\{p,g,w\}$ sendet, fängt sie die Nachricht ab und sendet an $A:\{p,g,w'\}$ + - Wenn das angebliche ,,gemeinsame Geheimnis'' berechnet wird, erhalten wir: + - A berechnet $s_1=w'^q\ MOD\ p = v^{r'}\ MOD\ p$, letzteres berechnet von E + - B berechnet $s_2=v'^r\ MOD\ p = w^{q'}\ MOD\ p$, letzteres berechnet von E + - A und E haben sich also auf ein gemeinsames Geheimnis $s_1$ geeinigt, und E und B haben sich auf ein gemeinsames Geheimnis $s_2$ geeinigt. + - Wenn das ,,gemeinsame Geheimnis'' nun von A und B verwendet wird, um Nachrichten zu verschlüsseln, die über den öffentlichen Kanal ausgetauscht werden sollen, kann E alle Nachrichten abfangen und ent- bzw. wiederverschlüsseln, bevor er sie zwischen A und B weiterleitet. +- Zwei Gegenmaßnahmen gegen den Man-in-the-Middle-Angriff: + - Das gemeinsame Geheimnis wird ,,authentifiziert'', nachdem es vereinbart worden ist. + - Wir werden dies im Abschnitt über die Schlüsselverwaltung behandeln + - A und B verwenden ein sogenanntes Interlock-Protokoll, nachdem sie sich auf ein gemeinsames Geheimnis geeinigt haben: + - Dazu müssen sie Nachrichten austauschen, die E weiterleiten muss, bevor sie sie entschlüsseln bzw. wieder verschlüsseln kann. + - Der Inhalt dieser Nachrichten muss von A und B überprüfbar sein. + - Dies zwingt E dazu, Nachrichten zu erfinden, und sie kann entdeckt werden. + - Eine Technik, um zu verhindern, dass E die Nachrichten entschlüsselt, besteht darin, sie in zwei Teile aufzuteilen und den zweiten Teil vor dem ersten zu senden. + - Wenn der verwendete Verschlüsselungsalgorithmus bestimmte Eigenschaften verhindert, kann E den zweiten Teil nicht verschlüsseln, bevor sie den ersten erhält. + - Da A den ersten Teil erst senden wird, nachdem er eine Antwort (den zweiten Teil) von B erhalten hat, ist E gezwungen, zwei Nachrichten zu erfinden, bevor sie die ersten Teile erhalten kann. +- Bemerkung: In der Praxis muss die Zahl g nicht unbedingt eine Urwurzel von p sein, es genügt, wenn sie eine große Untergruppe von $\mathbb{Z}^*_p$ erzeugt + +## ElGamal Algorithmus +- Der ElGamal-Algorithmus kann sowohl für die Verschlüsselung als auch für digitale Signaturen verwendet werden (siehe auch [ElG85a]). +- Wie der DH-Austausch basiert er auf der Schwierigkeit, diskrete Logarithmen in endlichen Feldern zu berechnen +- Um ein Schlüsselpaar zu erstellen: + - Wähle eine große Primzahl p, einen Generator g der multiplikativen Gruppe $\mathbb{Z}^*_p$ und eine Zufallszahl v, so dass $1\leq v\leq p - 2$. Berechnen Sie: $y=g^v mod p$ + - Der öffentliche Schlüssel ist $( y, g, p )$ + - Der private Schlüssel ist v +- So signieren Sie eine Nachricht m : + - Wähle eine Zufallszahl k so, dass k relativ prim zu $p-1$ ist. + - Berechne $r=g^k mod p$ + - Berechne mit dem erweiterten euklidischen Algorithmus $k^{-1}$, den Kehrwert von $k mod (p - 1)$ + - Berechne $s=k^{-1} \mal ( m - v \mal r) mod ( p - 1)$ + - Die Signatur über die Nachricht ist $( r, s )$ +- Überprüfen einer Signatur $( r , s )$ über eine Nachricht m: + - Bestätige, dass $y^r \times r^s\ MOD\ p = g^m\ MOD\ p$ + - Der Beweis: Wir benötigen Folgendes + - Lemma 3: Sei p eine Primzahl und g ein Generator von $\mathbb{Z}^*_p$. Dann sei $i \equiv j mod ( p -1) \Rightarrow g i \equiv g j mod p$ + - Beweis: $i \equiv j mod (p-1) \Rightarrow$ es gibt $k\in \mathbb{Z}^+$ so, dass $(i-j)=(p-1)\mal k$ + - Also $g^{(i-j)}=g^{(p-1)\mal k} \equiv 1^k\equiv 1 mod p$, wegen Theorem 3 (Euler) $\Rightarrow g^i \equiv g^j mod p$ + - Als $s\equiv k^{-1}\times(m-v\times r) mod (p-1)$ + - $\Leftrightarrow k \times s\equiv m-v\times r mod (p-1)$ + - $\Leftrightarrow m \equiv v\times r+k\times s mod (p-1)$ + - $\Rightarrow g^m \equiv g^{(v\Zeiten r+ k\Zeiten s)} mod p$ mit Lemma 3 + - $\Leftrightarrow g^m \equiv g^{(v\Zeiten r)}\Zeiten g^{(k\Zeiten s)} mod p$ + - $\Leftrightarrow g^m \equiv y^r\Zeiten r^s mod p$ +- Sicherheit von ElGamal-Signaturen: + - Da der private Schlüssel v benötigt wird, um s berechnen zu können, müsste ein Angreifer den diskreten Logarithmus von y modulo p zur Basis g berechnen, um Signaturen zu fälschen + - Entscheidend für die Sicherheit ist, dass für jede Nachricht eine neue Zufallszahl k gewählt wird, denn ein Angreifer kann das Geheimnis v berechnen, wenn er zwei Nachrichten zusammen mit ihren Signaturen auf der Basis des gleichen k erhält (siehe [Men97a], Anmerkung 11.66.ii) + - Um zu verhindern, dass ein Angreifer eine Nachricht M mit einer passenden Signatur erstellen kann, ist es notwendig, die Nachricht M nicht direkt zu signieren, sondern einen kryptographischen Hashwert $m=h(M)$ davon zu signieren (diese werden bald behandelt, siehe auch [Men97a], Anmerkung 11.66.iii) +- Um eine Nachricht m mit dem öffentlichen Schlüssel $(y,g,p)$ zu verschlüsseln: + - Wähle einen zufälligen $k\in\mathbb{Z}^+$ mit $k 512 | +- Die Sicherheit hängt auch stark von der Implementierung ab! + - Die verschiedenen Fälle (z.B. mit O) in der ECC-Berechnung können beobachtbar sein, d.h. Stromverbrauch und Zeitunterschiede + - Angreifer können Seitenkanalangriffe ableiten, wie in OpenSSL 0.9.8o [BT11] + - Ein Angreifer kann die Bitlänge eines Wertes k in $kP$ ableiten, indem er die für den Quadrat- und Multiplikationsalgorithmus benötigte Zeit misst + - Der Algorithmus wurde in OpenSSL frühzeitig abgebrochen, wenn keine weiteren Bits auf ,,1'' gesetzt wurden + - Angreifer könnten versuchen, ungültige Punkte zu generieren, um Fakten über den verwendeten Schlüssel abzuleiten, wie in OpenSSL 0.9.8g, was zu einer Wiederherstellung eines vollen 256-Bit ECC-Schlüssels nach nur 633 Abfragen führte [BBP12] +- Lektion gelernt: Machen Sie es nicht selbst, es sei denn, Sie müssen es tun und wissen, was Sie tun! + +### Weitere Anmerkungen +- Wie bereits erwähnt, ist es möglich, kryptographische elliptische Kurven über $G(2^n)$ zu konstruieren, was in Hardware-Implementierungen schneller sein kann. + - Wir haben auf Details verzichtet, da dies nicht viele neue Erkenntnisse gebracht hätte! +- Elliptische Kurven und ähnliche algebraische Gruppen sind ein aktives Forschungsgebiet und ermöglichen weitere fortgeschrittene Anwendungen, z.B: + - Sogenannte Edwards-Kurven werden derzeit diskutiert, da sie robuster gegen Seitenkanalangriffe zu sein scheinen (z.B. [BLR08]) + - Bilineare Paarungen ermöglichen + - Programme zu verifizieren, dass sie zur selben Gruppe gehören, ohne ihre Identität preiszugeben (Secret Handshakes, z.B. [SM09]) + - Öffentliche Schlüssel können strukturiert werden, z.B. ,,Alice'' als öffentlicher Schlüssel für Alice verwenden (Identitätsbasierte Verschlüsselung, Grundlagen in [BF03]) +- Bevor Sie elliptische Kurvenkryptographie in einem Produkt einsetzen, stellen Sie sicher, dass Sie keine Patente verletzen, da es noch viele gültige Patente in diesem Bereich gibt! + +## Schlussfolgerung +- Asymmetrische Kryptographie erlaubt es, zwei verschiedene Schlüssel zu verwenden: + - Verschlüsselung / Entschlüsselung + - Signieren / Überprüfen +- Die praktischsten Algorithmen, die immer noch als sicher gelten, sind: + - RSA, basierend auf der Schwierigkeit, diskrete Logarithmen zu faktorisieren und zu lösen + - Diffie-Hellman (kein asymmetrischer Algorithmus, sondern ein Schlüsselvereinbarungsprotokoll) + - ElGamal, wie DH basierend auf der Schwierigkeit, diskrete Logarithmen zu berechnen +- Da ihre Sicherheit vollständig auf der Schwierigkeit bestimmter mathematischer Probleme beruht, stellt der algorithmische Fortschritt ihre größte Bedrohung dar. +- Praktische Überlegungen: + - Asymmetrische kryptografische Operationen sind um Größenordnungen langsamer als symmetrische Operationen. + - Daher werden sie oft nicht für die Verschlüsselung/Signierung von Massendaten verwendet. + - Symmetrische Verfahren werden zur Verschlüsselung / Berechnung eines kryptografischen Hashwerts verwendet, während die asymmetrische Kryptografie nur zur Verschlüsselung eines Schlüssels / Hashwerts eingesetzt wird. + # Modifikationsprüfwerte +## Motivation +- In der Datenkommunikation ist es üblich, eine Art Fehlererkennungscode für Nachrichten zu berechnen, mit dem der Empfänger überprüfen kann, ob eine Nachricht während der Übertragung verändert wurde. + - Beispiele: Parität, Bit-Interleaved Parity, Cyclic Redundancy Check (CRC) +- Dies führt zu dem Wunsch, einen ähnlichen Wert zu haben, der es ermöglicht zu überprüfen, ob eine Nachricht während der Übertragung verändert wurde. +- Es ist jedoch ein großer Unterschied, ob man davon ausgeht, dass die Nachricht durch mehr oder weniger zufällige Fehler oder absichtlich verändert wird: + - Wenn jemand eine Nachricht, die mit einem CRC-Wert geschützt ist, absichtlich verändern will, kann er den CRC-Wert nach der Veränderung neu berechnen oder die Nachricht so verändern, dass sie den gleichen CRC-Wert ergibt. +- Ein Änderungsprüfwert muss also einige zusätzliche Eigenschaften erfüllen, die es Angreifern unmöglich machen, ihn zu fälschen + - Zwei Hauptkategorien von Modifikationsprüfwerten: + - Modifikationserkennungscode (MDC) + - Nachrichten-Authentifizierungs-Code (MAC) + +## Kryptographische Hash-Funktionen +- Definition: Hash-Funktion + - Eine Hash-Funktion ist eine Funktion h, die die folgenden zwei Eigenschaften hat: + - Komprimierung: h bildet eine Eingabe x mit beliebiger endlicher Bitlänge auf eine Ausgabe $h(x)$ mit fester Bitlänge n ab. + - Einfachheit der Berechnung: Bei h und x ist es einfach, $h(x)$ zu berechnen. +- Definition: kryptografische Hash-Funktion + - Eine kryptografische Hash-Funktion h ist eine Hash-Funktion, die zusätzlich unter anderem die folgenden Eigenschaften erfüllt: + - Pre-Image-Resistenz: für im Wesentlichen alle vorgegebenen Ausgaben y ist es rechnerisch nicht möglich, ein x zu finden, so dass $h(x)=y$ + - 2. Vorabbild-Resistenz: Bei x ist es rechnerisch nicht möglich, eine zweite Eingabe $x'$ mit $x\not= x'$ zu finden, so dass $h(x)=h(x')$ + - Kollisionssicherheit: Es ist rechnerisch nicht möglich, ein beliebiges Paar $(x,x')$ mit $x\not= x'$ zu finden, so dass $h(x)=h(x')$ + - Kryptographische Hash-Funktionen werden zur Berechnung von Modification Detection Codes (MDC) verwendet + +## Nachrichten-Authentifizierungs-Codes (MAC) +- Definition: Nachrichten-Authentifizierungs-Code + - Ein Message-Authentication-Code-Algorithmus ist eine Familie von Funktionen $h_k$, die durch einen geheimen Schlüssel k parametrisiert sind und die folgenden Eigenschaften aufweisen: + - Komprimierung: hk bildet eine Eingabe x beliebiger endlicher Bitlänge auf eine Ausgabe $h_k(x)$ fester Bitlänge ab, genannt MAC + - Einfache Berechnung: Bei k, x und einer bekannten Funktionsfamilie $h_k$ ist der Wert $h_k(x)$ einfach zu berechnen + - Berechnungsresistenz: für jeden festen, erlaubten, aber unbekannten Wert von k ist es bei null oder mehr Text-MAC-Paaren $(x_i, h_k(x_i))$ rechnerisch nicht möglich, ein Text-MAC-Paar $(x, h_k(x))$ für jede neue Eingabe $x\not= x_i$ zu berechnen + - Bitte beachten Sie, dass Rechenresistenz die Eigenschaft der Nicht-Wiederherstellung des Schlüssels impliziert, d.h. k kann nicht aus Paaren $(x_i,h_k(x_i))$ wiederhergestellt werden, aber Rechenresistenz kann nicht aus der Nicht-Wiederherstellung des Schlüssels abgeleitet werden, da der Schlüssel k nicht immer wiederhergestellt werden muss, um neue MACs zu fälschen + +## Ein einfacher Angriff gegen einen unsicheren MAC +- Betrachten wir zur Veranschaulichung die folgende MAC-Definition: + - Eingabe: Nachricht $m=(x_1,x_2,...,x_n)$, wobei $x_i$ 64-Bit-Werte sind, und Schlüssel k + - Berechne $\delta(m):= x_1\oplus x_2\oplus...\oplus x_n$, wobei $\oplus$ die bitweise Exklusiv-Oder-Verknüpfung bezeichnet + - Ausgabe: MAC $C_k(m):= E_k(\delta(m))$ mit $E_k(x)$ für die DES-Verschlüsselung +- Die Schlüssellänge beträgt 56 Bit und die MAC-Länge 64 Bit, so dass wir einen Aufwand von etwa $2^{55}$ Operationen erwarten würden, um den Schlüssel k zu erhalten und den MAC zu knacken (= Nachrichten fälschen zu können). +- Leider ist die MAC-Definition unsicher: + - Angenommen, ein Angreifer Eve, der die zwischen Alice und Bob ausgetauschten Nachrichten fälschen will, erhält eine Nachricht $(m,C_k(m))$, die von Alice mit dem mit Bob geteilten geheimen Schlüssel k ,,geschützt'' wurde + - Eve kann eine Nachricht $m'$ konstruieren, die denselben MAC ergibt: + - Sei $y_1,y_2,...,y_{n-1}$ ein beliebiger 64-Bit-Wert + - Definiere $y_n:= y_1\oplus y_2\oplus...\oplus y_{n-1}\oplus \delta(m)$, und $m':=(y_1,y_2,...,y_n)$ + - Wenn Bob $(m',C_k(m))$ von Eve erhält, die vorgibt, Alice zu sein, wird er es als von Alice stammend akzeptieren, da $C_k(m)$ ein gültiger MAC für $m'$ ist + +## Anwendungen für kryptographische Hash-Funktionen und MACs +- Wichtigste Anwendung, die zum ursprünglichen Entwurf führte: Integrität von Nachrichten + - Ein MDC stellt einen digitalen Fingerabdruck dar, der mit einem privaten Schlüssel signiert werden kann, z. B. mit dem RSA- oder ElGamal-Algorithmus, und es ist nicht möglich, zwei Nachrichten mit demselben Fingerabdruck zu erstellen, so dass ein bestimmter signierter Fingerabdruck von einem Angreifer nicht wiederverwendet werden kann + - Ein MAC über eine Nachricht m bescheinigt direkt, dass der Absender der Nachricht im Besitz des geheimen Schlüssels k ist und die Nachricht ohne Kenntnis dieses Schlüssels nicht verändert worden sein kann. +- Andere Anwendungen, die eine gewisse Vorsicht erfordern: + - Bestätigung von Wissen + - Schlüsselableitung + - Pseudo-Zufallszahlengenerierung +- Je nach Anwendung müssen weitere Anforderungen erfüllt werden: + - Partielle Vorabbild-Resistenz: auch wenn nur ein Teil der Eingabe, z.B. t Bit, unbekannt ist, sollte es im Durchschnitt $2^{t-1}$ Operationen benötigen, um diese Bits zu finden + +## Angriffe basierend auf dem Geburtstagsphänomen +- Das Geburtstagsphänomen: + - Wie viele Personen müssen sich in einem Raum befinden, damit die Wahrscheinlichkeit, dass es mindestens zwei Personen mit demselben Geburtstag gibt, größer als 0,5 ist? + - Der Einfachheit halber lassen wir den 29. Februar beiseite und nehmen an, dass jeder Geburtstag gleich wahrscheinlich ist +- Definieren Sie $P(n,k):= Pr$[mindestens ein Duplikat in k Elementen, wobei jedes Element einen von n gleich wahrscheinlichen Werten zwischen 1 und n annehmen kann ] +- Definieren Sie $Q(n,k):= Pr$[kein Duplikat in k Artikeln, jeder Artikel zwischen 1 und n ] + - Wir können das erste Element aus n möglichen Werten wählen, das zweite Element aus $n-1$ möglichen Werten, usw. + - Die Anzahl der verschiedenen Möglichkeiten, k Elemente aus n Werten ohne Duplikate auszuwählen, ist also: $N=n \mal (n-1)\mal...\mal(n-k+1)= n!\backslash(n-k)!$ + - Die Anzahl der verschiedenen Möglichkeiten, k Elemente aus n Werten auszuwählen, mit oder ohne Duplikate, ist: $n^k$ + - Also, $Q(n,k)=N\backslash n^k=n!\backslash((n-k)! \times n^k)$ +- Wir haben: $P(n,k)=1-Q(n,k)=1-\frac{n!}{(n-k)!\times n^k}=1-\frac{n\times(n-1)\times...\times(n-k+1)}{n^k}=1-[(1-\frac{1}{n})\times(1-\frac{2}{n})\times...\times(1-\frac{k-1}{n})]$ +- Wir werden die folgende Ungleichung verwenden: $(1-x) \leq e^{-x}$ für alle $x \geq 0$ +- So: $P(n,k)>1-[(e^{-1/n})\times(e^{-2/n})\times...\times(e^{-(k-1)/n})]=1-e^{\frac{-k\times(k-1)}{2n}}$ +- Im letzten Schritt haben wir die Gleichheit: $1+2+...+(k-1)=(k^2 - k)\backslash 2$ + - Übung: Beweisen Sie die obige Gleichheit durch Induktion +- Kehren wir zu unserer ursprünglichen Frage zurück: Wie viele Personen k müssen sich in einem Raum befinden, damit mindestens zwei Personen mit demselben Geburtstag (von $n=365$ möglichen) mit der Wahrscheinlichkeit $\geq 0,5$ vorhanden sind? + - Wir wollen also lösen: $\frac{1}{2}=1-e^{\frac{-k\times(k-1)}{2n}}\Leftrightarrow 2=e^{\frac{k\times(k-1)}{2n}}\Leftrightarrow ln(2)=\frac{k\times(k-1)}{2n}$ + - Für große k können wir $k\times(k-1)$ durch $k^2$ approximieren, und wir erhalten: $k=\sqrt{2 ln(2)n}\ca. 1,18\sqrt{n}$ + - Für $n=365$ erhalten wir $k=22,54$, was der richtigen Antwort recht nahe kommt 23 +- Was hat das mit MDCs zu tun? +- Wir haben gezeigt, dass bei n möglichen unterschiedlichen Werten die Anzahl k der Werte, die man zufällig wählen muss, um mindestens ein Paar identischer Werte zu erhalten, in der Größenordnung von $\sqrt{n}$ liegt. +- Betrachten wir nun den folgenden Angriff [Yuv79a]: + - Eve möchte, dass Alice eine Nachricht m1 signiert, die Alice normalerweise nie signieren würde. Eve weiß, dass Alice die Funktion MDC1(m) verwendet, um eine MDC von m zu berechnen, die eine Länge von r Bit hat, bevor sie diese MDC mit ihrem privaten Schlüssel signiert, was ihre digitale Signatur ergibt. + - Zunächst erzeugt Eve ihre Nachricht m1. Würde sie nun MDC1(m1) berechnen und dann versuchen, eine zweite harmlose Nachricht m2 zu finden, die zu demselben MDC führt, wäre ihr Suchaufwand im durchschnittlichen Fall in der Größenordnung von $2^{(r-1)}$. + - Stattdessen nimmt sie eine beliebige harmlose Nachricht m2 und beginnt, Variationen m1' und m2' der beiden Nachrichten zu produzieren, z.B. durch Hinzufügen von -Kombinationen oder Variationen mit semantisch identischen Wörtern. +- Wie wir aus dem Geburtstagsphänomen gelernt haben, muss sie nur etwa $\sqrt{2^r}=2^{r/2}$ Variationen von jeder der beiden Nachrichten produzieren, so dass die Wahrscheinlichkeit, dass sie zwei Nachrichten m1' und m2' mit demselben MDC erhält, mindestens 0,5 beträgt +- Da sie die Nachrichten zusammen mit ihren MDCs speichern muss, um eine Übereinstimmung zu finden, liegt der Speicherbedarf ihres Angriffs in der Größenordnung von $2^{\frac{r}{2}}$ und der Rechenzeitbedarf in der gleichen Größenordnung +- Nachdem sie m1' und m2' mit $MDC1(m1')=MDC1(m2')$ gefunden hat, fordert sie Alice auf, $m2'$ zu signieren. Eve kann dann diese Unterschrift nehmen und behaupten, dass Alice $m1'$ unterschrieben hat. +- Angriffe nach dieser Methode werden Geburtstagsangriffe genannt. +- Nehmen wir nun an, dass Alice RSA mit Schlüsseln der Länge 2048 Bit und eine kryptographische Hashfunktion verwendet, die MDCs der Länge 96 Bit erzeugt. + - Eves durchschnittlicher Aufwand, zwei Nachrichten m1' und m2' wie oben beschrieben zu erzeugen, liegt in der Größenordnung von $2^{48}$, was heute machbar ist. Das Knacken von RSA-Schlüsseln der Länge 2048 Bit ist mit den heutigen Algorithmen und Technologien bei weitem nicht möglich. + +## Übersicht über die gebräuchlichen MDCs +- Kryptografische Hash-Funktionen zur Erstellung von MDCs: + - Message Digest 5 (MD5): + - Erfunden von R. Rivest + - Nachfolger von MD + - Sicherer Hash-Algorithmus 1 (SHA-1): + - Erfunden von der National Security Agency (NSA) + - Der Entwurf wurde von MD inspiriert. + - Sicherer Hash-Algorithmus 2 (SHA-2, auch SHA-256 und SHA-512) + - Ebenfalls von der National Security Agency (NSA) entwickelt + - Auch Merkle-Dåmgard-Verfahren + - Größere Blockgröße & komplexere Rundenfunktion + - Sicherer Hash-Algorithmus 3 (SHA-3, Keccak) + - Gewinner eines offenen Wettbewerbs + - Sogenannte Sponge-Konstruktion + - Vielseitiger als frühere Hash-Funktionen +- Nachrichten-Authentifizierungs-Codes (MACs): + - DES-CBC-MAC: + - Verwendet den Data Encryption Standard im Cipher Block Chaining Modus + - Im Allgemeinen kann die CBC-MAC-Konstruktion mit jeder Blockchiffre verwendet werden. + - MACs, die aus MDCs aufgebaut sind: + - Dieser sehr verbreitete Ansatz wirft einige kryptografische Bedenken auf, da er einige implizite, aber nicht verifizierte Annahmen über die Eigenschaften der MDCs trifft. +- Authentifizierte Verschlüsselung mit zugehörigen Daten (AEAD) + - Galois-Counter-Verfahren (GCM) + - Verwendet eine Blockchiffre zur Verschlüsselung und Authentifizierung von Daten + - Schnell in Netzwerkanwendungen + - Sponge Wrap + - Verwendet eine SHA-3 ähnliche Hash-Funktion zur Verschlüsselung und Authentifizierung von Daten + +## Gemeinsame Struktur von kryptografischen Hash-Funktionen +- So wie viele der heutigen Blockchiffren der allgemeinen Struktur eines Feistel-Netzwerks folgen, folgen auch viele der heute verwendeten kryptografischen Hash-Funktionen einer gemeinsamen Struktur, der sogenannten Merkle-Dåmgard-Struktur: + - Sei y eine beliebige Nachricht. Normalerweise wird die Länge der Nachricht an die Nachricht angehängt und auf ein Vielfaches einer Blockgröße b aufgefüllt. Bezeichnen wir $(y_0,y_1,...,y_{L-1})$ die resultierende Nachricht, die aus L Blöcken der Größe b + - Die allgemeine Struktur ist wie folgt abgebildet: ![](Assets/NetworkSecurity-feistel.png) + - CV ist ein Verkettungswert, mit $CV_0:= IV$ und $MDC(y) := CV_L$ + - f ist eine spezifische Kompressionsfunktion, die $(n+b)$ Bit auf n Bit komprimiert +- Die Hash-Funktion H lässt sich wie folgt zusammenfassen: + - $CV_0 = IV =$ anfänglicher n-Bit-Wert + - $CV_i = f(CV_{i -1}, y_{i-1}) \quad\quad 1\leq i \leq L$ + - $H(y) = CV_L$ +- Es wurde gezeigt [Mer89a], dass, wenn die Kompressionsfunktion f kollisionssicher ist, die resultierende iterierte Hash-Funktion H ebenfalls kollisionssicher ist. +- Die Kryptoanalyse kryptographischer Hash-Funktionen konzentriert sich daher auf die interne Struktur der Funktion f und die Suche nach effizienten Techniken zur Erzeugung von Kollisionen bei einer einzigen Ausführung von f +- In erster Linie durch Geburtstagsangriffe motiviert, ist ein gängiger Mindestvorschlag für n , die Bitlänge des Hashwerts, 160 Bit, da dies einen Aufwand der Größenordnung $2^{80}$ für einen Angriff impliziert, der heute als undurchführbar gilt + +## Der Message Digest 5 +- MD5 folgt der zuvor skizzierten allgemeinen Struktur (z. B. [Riv92a]): + - Die Nachricht y wird mit einer ,,1'' aufgefüllt, gefolgt von 0 bis 511 ,,0'' Bits, so dass die Länge der resultierenden Nachricht kongruent 448 modulo 512 ist + - Die Länge der ursprünglichen Nachricht wird als 64-Bit-Wert hinzugefügt, so dass eine Nachricht entsteht, deren Länge ein ganzzahliges Vielfaches von 512 Bit ist. + - Diese neue Nachricht wird in Blöcke der Länge $b=512$ Bit unterteilt. + - Die Länge des Verkettungswertes ist $n=128$ Bit + - Der Verkettungswert ist ,,strukturiert'' als vier 32-Bit-Register A, B, C, D + - Initialisierung: + - A := 0x 01 23 45 67 + - B := 0x 89 AB CD EF + - C := 0x FE DC BA 98 + - D := 0x 76 54 32 10 + - Jeder Block der Nachricht $y_i$ wird mit dem Verkettungswert $CV_i$ mit der Funktion f verarbeitet, die intern durch 4 Runden zu je 16 Schritten realisiert ist + - Jede Runde ist ähnlich aufgebaut und verwendet eine Tabelle T, die 64 konstante Werte von je 32 Bit enthält, + - Jede der vier Runden verwendet eine bestimmte logische Funktion g +- ![](Assets/NetzwerkSicherheit-md5.png) + - Die Funktion g ist eine von vier verschiedenen logischen Funktionen + - $y_i[k]$ bezeichnet das k-te$ 32-Bit-Wort des Nachrichtenblocks i + - $T[j]$ ist der j-te Eintrag der Tabelle t, wobei j bei jedem Schritt modulo 64 inkrementiert wird + - CLS s bezeichnet die zyklische Linksverschiebung um s Bits, wobei s einem bestimmten Schema folgt. +- Der MD5-MDC über eine Nachricht ist der Inhalt des Verkettungswertes CV nach Verarbeitung des letzten Nachrichtenblocks. +- Sicherheit von MD5: + - Jedes Bit des 128-Bit-Hash-Codes ist eine Funktion eines jeden Eingabebits + - 1996 veröffentlichte H. Dobbertin einen Angriff, der es erlaubt, eine Kollision für die Funktion f zu erzeugen (realisiert durch die oben beschriebenen 64 Schritte). + - Es dauerte bis 2004, bis eine erste Kollision gefunden wurde [WLYF04]. + - Inzwischen ist es möglich, Kollisionen innerhalb von Sekunden auf allgemeiner Hardware zu erzeugen [Kl06]. + - MD5 darf nicht in Betracht gezogen werden, wenn Kollisionssicherheit erforderlich ist! + - Dies ist oft der Fall! + - Beispiele: Zwei Postskripte mit unterschiedlichen Texten, aber gleichen Hashes [LD05], Zertifikate, eines für eine gesicherte Domain und eines für eine eigene Zertifizierungsstelle [LWW05], Jede Nachricht, die erweiterbar ist [KK06] + - Die Resistenz gegen Preimage-Angriffe ist mit 2123.4 Berechnungen noch o.k[SA09] + +## Der sichere Hash-Algorithmus SHA-1 +- Auch SHA-1 folgt der gleichen Struktur wie oben beschrieben: + - SHA-1 arbeitet mit 512-Bit-Blöcken und erzeugt einen 160-Bit-Hash-Wert. + - Da sein Design auch vom MD4-Algorithmus inspiriert wurde, ist seine Initialisierung im Grunde dieselbe wie die von MD5: + - Die Daten werden aufgefüllt, ein Längenfeld wird hinzugefügt und die resultierende Nachricht wird als Blöcke der Länge 512 Bit verarbeitet. + - Der Verkettungswert ist als fünf 32-Bit-Register A, B, C, D, E strukturiert + - Initialisierung: + - A = 0x 67 45 23 01 + - B = 0x EF CD AB 89 + - C = 0x 98 BA DC FE + - D = 0x 10 32 54 76 + - E = 0x C3 D2 E1 F + - Die Werte werden im Big-Endian-Format gespeichert. + - Jeder Block yi der Nachricht wird zusammen mit CVi in einem Modul verarbeitet, das die Kompressionsfunktion f in vier Runden zu je 20 Schritten realisiert. + - Die Runden haben eine ähnliche Struktur, aber jede Runde verwendet eine andere primitive logische Funktion $f_1, f_2, f_3, f_4$. + - Bei jedem Schritt wird eine feste additive Konstante $K_t$ verwendet, die während einer Runde unverändert bleibt +- ![](Assets/NetworkSecurity-sha1.png) + - $t\in\{0,...,15\}\Rechtspfeil W_t:= y_i[t]$ + - $t\in\{16,...,79\}\Pfeil nach rechts W_t:=CLS_1(W_{t-16}\oplus W_{t-14}\oplus W_{t-8} \oplus W_{t-3})$ + - Nach Schritt 79 wird jedes Register A, B, C, D, E modulo $2^{32}$ mit dem Wert des entsprechenden Registers vor Schritt 0 addiert, um $CV_{i+1}$ zu berechnen +- Der SHA-1-MDC über eine Nachricht ist der Inhalt des Verkettungswertes CV nach Verarbeitung des letzten Nachrichtenblocks. +- Vergleich zwischen SHA-1 und MD5: + - Geschwindigkeit: SHA-1 ist etwa 25% langsamer als MD5 (CV ist etwa 25% größer) + - Einfachheit und Kompaktheit: beide Algorithmen sind einfach zu beschreiben und zu implementieren und erfordern keine großen Programme oder Ersetzungstabellen +- Sicherheit von SHA-1: + - Da SHA-1 MDCs der Länge 160 Bit erzeugt, wird erwartet, dass es eine bessere Sicherheit gegen Brute-Force- und Geburtstagsangriffe bietet als MD5. + - Einige inhärente Schwächen von Merkle-Dåmgard-Konstruktionen, z. B. [KK06], sind vorhanden + - Im Februar 2005 veröffentlichten X. Wang et. al. einen Angriff, der es erlaubt, eine Kollision mit einem Aufwand von $2^{69}$ zu finden, der in den folgenden Monaten auf $2^{63}$ verbessert und in [WYY05a] veröffentlicht wurde + - Die Forschung ging weiter (z.B. [Man11]), und im Februar 2017 wurde die erste tatsächliche Kollision gefunden (demonstriert mit einem veränderten PDF-Dokument) +- SHA-2-Familie + - Im Jahr 2001 veröffentlichte das NIST einen neuen Standard FIPS PUB 180-2, der neue Varianten mit den Bezeichnungen SHA-256, SHA-384 und SHA-512 [NIST02] mit 256, 384 und 512 Bits enthält. + - SHA-224 wurde im Jahr 2004 hinzugefügt. + - SHA-224 und SHA-384 sind verkürzte Versionen von SHA-256 und SHA-512 mit unterschiedlichen Initialisierungswerten + - SHA-2 verwendet ebenfalls die Merkle-Dåmgard-Konstruktion mit einer Blockgröße von 512 Bit (SHA-256) und 1024 Bit (SHA-512) + - Der interne Zustand ist in 8 Registern von 32 Bit (SHA-256) und 64 Bit (SHA-512) organisiert + - 64 Runden (SHA-256) oder 80 Runden (SHA-512) +- Ein Schritt + - ![](Assets/NetworkSecurity-sha-2.png) + - $t\in\{0, ..., 15\}\Rechtspfeil W_t:=y_i[t]$ + - $t\in\{16, ..., r\}\Rightarrow W_t:=W_{t-16}\oplus \delta_0(W_{t-15})\oplus W_{t-7}\oplus\delta_1(W_{t-2})$ + - $K_t$ ist der gebrochene Teil der Kubikwurzel aus der t-ten Primzahl + - Die ROTR- und Funktionen XOR-verknüpfen verschiedene Verschiebungen des Eingangswertes + - Ch und Maj sind logische Kombinationen der Eingabewerte +- SHA-2-Familie + - Alles in allem sehr ähnlich zu SHA-1 + - Aufgrund der Größe und der komplizierteren Rundungsfunktionen etwa 30-50 Prozent langsamer als SHA-1 (variiert für 64-Bit- und 32-Bit-Systeme!) + - Sicherheitsdiskussion: + - Bereits 2004 wurde entdeckt, dass eine vereinfachte Version des Algorithmus (mit XOR statt Addition und symmetrischen Konstanten) hochkorrelierte Ausgaben erzeugt [GH04] + - Für rundenreduzierte Versionen von SHA-2 gibt es Pre-Image-Angriffe, die schneller sind als Brute-Force, aber sehr unpraktisch (z.B. [AGM09]) + - Auch wenn Größe und Komplexität derzeit keine Angriffe zulassen, ist die Situation unangenehm + - Dies führte zur Notwendigkeit eines neuen SHA-3-Standards + +## Der sichere Hash-Algorithmus SHA-3 +- Sicherheitsbedenken bezüglich SHA-1 und SHA-2 führten zu einem offenen Wettbewerb des NIST, der 2007 begann + - 5 Finalisten ohne nennenswerte Schwächen + - Oktober 2012: NIST gibt bekannt, dass Keccak zu SHA-3 wird + - 4 europäische Erfinder + - Einer davon ist Joan Daemen, der AES mitentwickelt hat + - SHA-3 ist sehr schnell, besonders in der Hardware + - Sehr gut dokumentiert und analysierbar +- Keccak basiert auf einer so genannten Schwammkonstruktion anstelle der früheren Merkle-Dåmgard-Konstruktionen + - Vielseitiges Design, um fast alle symmetrischen kryptographischen Funktionen zu implementieren (allerdings ist nur das Hashing standardisiert) +- Arbeitet normalerweise in 2 Phasen + - ,,Absorbieren'' von Informationen beliebiger Länge in 1600 Bit des internen Zustands + - ,,Auspressen'' (d.h. Ausgeben) von Hash-Daten beliebiger Länge (nur 224, 256, 384 und 512 Bit standardisiert) +- Der interne Zustand ist in 2 Registern organisiert + - Ein Register der Größe r ist ,,public'': Eingabedaten werden in der Absorptionsphase mit XOR verknüpft, Ausgabedaten werden in der Quetschungsphase daraus abgeleitet + - Das Register der Größe c ist ,,privat''; Ein- und Ausgabe wirken sich nicht direkt auf es aus. + - In Keccak ist die Größe der Register 1600 Bits (d.h. $c+r=1600$ Bits) + - Die Größe von c ist doppelt so groß wie die Länge des Ausgangsblocks + - Beide Register werden mit ,,0'' initialisiert +- Das Hashing erfolgt durch eine Funktion f, die die Register liest und einen neuen Zustand ausgibt +- Sponge-Konstruktion + - ![](Assets/NetzwerkSicherheit-sha-3.png) + - Absorptionsphase: $k + 1$ Eingabeblöcke der Größe r werden in den Zustand gemischt + - Quetschphase: $l + 1$ Ausgangsblöcke der Größe r werden erzeugt (oft nur einer) + - Der letzte Eingabe- und Ausgabeblock kann aufgefüllt oder abgeschnitten werden. +- Die Funktion f + - Offensichtlich hängt die Sicherheit einer Sponge-Konstruktion von der Sicherheit von f + - Keccak verwendet 24 Runden von 5 verschiedenen Unterfunktionen $(\Sigma, \ro,\pi,𝜒,ɩ)$, um f zu implementieren. + - Die Unterfunktionen operieren auf einem ,,dreidimensionalen'' Bit-Array a $[5][5][w]$, wobei w entsprechend der Größe r und c gewählt wird + - Alle Operationen werden über $GF(2^n)$ durchgeführt. + - Jede der Unterfunktionen gewährleistet bestimmte Eigenschaften, z.B, + - Schnelle Diffusion der geänderten Bits im gesamten Zustand ($\Sigma$) + - Langfristige Diffusion ($\pi$) + - Sicherstellung, dass f nichtlinear wird (𝜒) + - Rundenspezifische Substitution (ɩ) +- $\Sigma$ wird zuerst ausgeführt, um sicherzustellen, dass sich der geheime und der öffentliche Zustand schnell vermischen, bevor andere Unterfunktionen angewendet werden. +- Sicherheit + - Derzeit gibt es keine nennenswerten Schwachstellen in SHA-3 + - Die bekanntesten Pre-Image-Angriffe funktionieren nur mit einer Funktion f mit bis zu 8 Runden + - Zum Schutz vor internen Kollisionen sollten 11 Runden ausreichen. + - Im Vergleich zu SHA-1 und SHA-2 werden zusätzliche Sicherheitseigenschaften garantiert, da der interne Zustand nie öffentlich gemacht wird + - Verhindert Angriffe, bei denen beliebige Informationen zu einer gültigen geheimen Nachricht hinzugefügt werden + - Bietet Chosen Target Forced Prefix (CTFP) Preimage-Resistenz [KK06], d.h. es ist nicht möglich, eine Nachricht $m=P||S$ zu konstruieren, wobei P fest und S beliebig gewählt ist, s.t., $H(m)=y$ + - Für Merkle-Dåmgard-Konstruktionen ist dies nur so schwer wie die Kollisionssicherheit + - Keine schnelle Möglichkeit, Multikollisionen schnell zu erzeugen [Jou04] + +## Cipher Block Chaining Message Authentication Codes +- Ein CBC-MAC wird berechnet, indem eine Nachricht im CBC-Modus verschlüsselt wird und der letzte Chiffretextblock oder ein Teil davon als MAC verwendet wird: + - ![](Assets/NetworkSecurity-CBC-mac.png) +- Dieser MAC muss nicht mehr signiert werden, da er bereits mit einem gemeinsamen Geheimnis K erzeugt wurde. + - Es ist jedoch nicht möglich zu sagen, wer genau einen MAC erstellt hat, da jeder (Sender, Empfänger), der den geheimen Schlüssel K kennt, dies tun kann +- Dieses Verfahren funktioniert mit jeder Blockchiffre (DES, IDEA, ...) +- Sicherheit von CBC-MAC: + - Da ein Angreifer K nicht kennt, ist ein Geburtstagsangriff sehr viel schwieriger (wenn nicht gar unmöglich) zu starten + - Ein Angriff auf einen CBC-MAC erfordert bekannte Paare (Nachricht, MAC) + - Dies ermöglicht kürzere MACs + - Ein CBC-MAC kann optional verstärkt werden, indem man sich auf einen zweiten Schlüssel $K'\not= K$ einigt und eine dreifache Verschlüsselung des letzten Blocks durchführt: $MAC:=E(K,D(K',E(K,C_{n-1})))$ + - Dadurch verdoppelt sich der Schlüsselraum bei nur geringem Rechenaufwand + - Die Konstruktion ist nicht sicher, wenn die Nachrichtenlängen variieren! +- Es gibt auch einige Vorschläge, MDCs aus symmetrischen Blockchiffren zu erzeugen, indem der Schlüssel auf einen festen (bekannten) Wert gesetzt wird: + - Wegen der relativ kleinen Blockgröße von 64 Bit der meisten gängigen Blockchiffren bieten diese Verfahren keine ausreichende Sicherheit gegen Geburtstagsangriffe. + - Da symmetrische Blockchiffren mehr Rechenaufwand erfordern als spezielle kryptografische Hash-Funktionen, sind diese Verfahren relativ langsam. + +## Konstruktion eines MAC aus einem MDC +- Grund für die Konstruktion von MACs aus MDCs Kryptografische Hash-Funktionen laufen im Allgemeinen schneller ab als symmetrische Blockchiffren +- Grundidee: ,,mix'' einen geheimen Schlüssel K mit der Eingabe und berechne einen MDC +- Die Annahme, dass ein Angreifer K kennen muss, um einen gültigen MAC zu erzeugen, wirft dennoch einige kryptografische Probleme auf (zumindest für Merkle-Dåmgard-Hash-Funktionen): + - Die Konstruktion $H(K||m)$ ist nicht sicher (siehe Anmerkung 9.64 in [Men97a]) + - Die Konstruktion $H(m||K)$ ist nicht sicher (siehe Bemerkung 9.65 in [Men97a]) + - Die Konstruktion $H(K||p||m||K)$, bei der p ein zusätzliches Auffüllfeld bezeichnet, bietet keine ausreichende Sicherheit (siehe Anmerkung 9.66 in [Men97a]) +- Die am häufigsten verwendete Konstruktion ist: $H(K\oplus p_1|| H(K\oplus p_2|| m))$ + - Der Schlüssel wird mit 0's aufgefüllt, um den Schlüssel zu einem Eingabeblock der kryptographischen Hashfunktion aufzufüllen + - Zwei verschiedene konstante Muster $p_1$ und $p_2$ werden mit dem aufgefüllten Schlüssel XOR-verknüpft + - Dieses Schema scheint sicher zu sein (siehe Anmerkung 9.67 in [Men97a]) + - Es wurde in RFC 2104 [Kra97a] standardisiert und wird HMAC genannt. + +## Authentifizierte Verschlüsselung mit zugehörigen Daten (AEAD) Modi +- Normalerweise sind die Daten nicht authentifiziert oder verschlüsselt, sondern verschlüsselt UND authentifiziert (Blöcke $P_0...P_n$) +- Manchmal müssen zusätzliche Daten authentifiziert werden (z.B. Paketköpfe), im Folgenden mit $A_0...A_m$ bezeichnet +- führte zur Entwicklung von AEAD-Betriebsarten +- Beispiele hierfür sind + - Galois/Zähler-Modus (GCM) + - Zähler mit CBC-MAC (CCM) + - Offset-Codebuch-Modus (OCM) + - SpongeWrap - eine Methode zur Verwendung von Keccak für den AEAD-Betrieb + +### Galois/Zähler-Modus (GCM) [MV04] +- Beliebter AEAD-Modus +- NIST-Standard, Teil von IEEE 802.1AE, IPsec, TLS, SSH usw. +- Frei von Patenten +- Wird wegen seiner hohen Geschwindigkeit hauptsächlich in Netzwerkanwendungen eingesetzt + - Äußerst effizient in der Hardware + - Prozessorunterstützung auf neueren x86-CPUs + - Zeitintensive Aufgaben können vorberechnet und parallelisiert werden + - Keine Notwendigkeit für Auffüllungen +- Verwendet konventionelle Blockchiffre mit 128-Bit-Blockgröße (z. B. AES) +- Berechnet MAC durch Multiplikationen und Additionen in $GF(2^{128})$ über das irreduzible Polynom $x^{128}+x^{7}+x^{2}+x+1$ +- Erfordert nur $n+1$ Blockchiffre-Aufrufe pro Paket (n = Länge der verschlüsselten und authentifizierten Daten) +- ![](Assets/NetworkSecurity-gcm.png) + - $I_0$ wird mit dem IV und einem Padding oder einem Hash des IV initialisiert (wenn er nicht 96 Bit beträgt) + - $\circ H$ ist $GF(2^{128})$ Multiplikation mit $H=E(K,0^{128})$ + - Die Eingabeblöcke $A_m$ und $P_n$ werden auf 128 Bit aufgefüllt + - $A_m$ und $C_n$ werden vor der Ausgabe auf die Originalgröße gekürzt + - Die letzte Authentifizierung verwendet 64 Bit kodierte Bitlängen von A und C +- Sicherheit + - Schneller Modus, erfordert aber einige Sorgfalt: + - Erwiesenermaßen sicher (unter bestimmten Voraussetzungen, z. B. wenn die verwendete Blockchiffre nicht von Zufallszahlen unterscheidbar ist), aber die Konstruktion ist anfällig: + - IVs MÜSSEN NICHT wiederverwendet werden, da sonst Datenströme XOR-verknüpft werden können und das XOR der Datenströme wiederhergestellt werden kann, was zu einer sofortigen Wiederherstellung des geheimen Werts ,,H'' führen kann + - H hat einen möglichen schwachen Wert $0^{128}$, in diesem Fall wird die Authentifizierung nicht funktionieren, und wenn IVs mit einer anderen Länge als 96 Bits verwendet werden, wird $C_0$ immer gleich sein! + - Einige andere Schlüssel erzeugen Hash-Schlüssel mit einer niedrigen Ordnung, was vermieden werden muss... [Saa11] + - Erfolgreiche Fälschungsversuche können Informationen über H durchsickern lassen, daher MÜSSEN kurze MAC-Längen vermieden oder risikominimiert werden [Dwo07] + - Die erreichte Sicherheit ist nur $2^{t-k}$ und nicht $2^t$ (für MAC-Länge t und Anzahl der Blöcke $2^k$), da Blöcke modifiziert werden können, um nur Teile des MAC zu ändern [Fer05] + +### Kleiner Exkurs: Rechenoperationen in $GF(2^n)$ +- Galoisfeld-Arithmetik definiert über Termen (z.B. $a_3x^3+a_2x^2+a_1x+a_0$) +- Koeffizienten sind Elemente des Feldes $\matbb{Z}_2$, d.h. entweder 0 oder 1 +- Oft werden nur die Koeffizienten gespeichert, so wird aus x^4 +x^2 +x^1 0x16 +- Die Addition in $GF(2^n)$ ist einfach die Addition von Termen + - Da gleiche Koeffizienten auf 0 abbilden, einfach XOR der Werte! + - Extrem schnell in Hard- und Software! +- Multiplikation in $GF(2^n)$ ist Polynommultiplikation und anschließende Modulodivision durch ein irreduzibles Polynom vom Grad n + - Irreduzible Polynome sind nicht ohne Rest durch irgendein anderes Polynom teilbar, außer durch ,,1'', ähnlich wie Primzahlen in GF + - Kann durch eine Reihe von Verschiebe- und XOR-Operationen implementiert werden + - Sehr schnell in Hardware oder auf neueren Intel-CPUs (mit CLMUL-Operationen) + - Modulo-Operation kann wie bei einer regulären CRC-Berechnung durchgeführt werden +- Addition Beispiel: + - $x^3 +x+1 x\oplus x^2+x = x^3 +x^2 +1 \leftrightarrow$ 0x0B XOR 0x06 = 0x0D +- Multiplikationsbeispiel (über $x^4 +x+1$): + - $x^3 +x+1\circ x^2+x = x^5+x^3+x^2\oplus x^4+x^2+x\ MOD\ x^4+x+1=x^5+x^4+x^3+x\ MOD\ x^4+x+1 = x^3 +x^2 +x+1$ +- Elemente von $GF(2^n)$ (mit Ausnahme von 1 und dem irreduziblen Polynom) können ein Generator für die Gruppe sein +- Beispiel für x und das Polynom $x^4+x+1:x,x^2,x^3,x+1,x^2+x,x^3+x^2,x^3+x+1,x^2 +1,x^3+x,x^2+x+1,x^3+x^2+x,x^3+x^2+x+1,x^3+x^2+1,x^3+1,1,x,...$ +- Andere Konzepte endlicher Gruppen gelten ebenfalls, z. B. hat jedes Element ein multiplikatives inverses Element + - Kann durch eine angepasste Version des Erweiterten Euklidischen Algorithmus gefunden werden + +## SpongeWrap +- Durch Verwendung von SHA-3 ist es auch möglich, ein AEAD-Konstrukt zu implementieren [BDP11a] +- Die Konstruktion ist sehr einfach und vergleichsweise leicht zu verstehen +- Verwendet den sogenannten Duplex-Modus für Sponge-Funktionen, bei dem Schreib- und Leseoperationen verschachtelt werden +- Erfordert kein Auffüllen der Daten auf eine bestimmte Blockgröße +- Kann nicht parallelisiert werden +- Sicherheit: + - Noch nicht weit verbreitet, aber mehrere Aspekte haben sich als genauso sicher wie SHA-3 im standardisierten Modus erwiesen + - Wenn die authentifizierten Daten A keine eindeutige IV enthalten, wird derselbe Schlüsselstrom erzeugt (ermöglicht die Wiederherstellung eines Blocks XOR-verschlüsselter Daten) +- ![](Assets/NetworkSecurity-sponge-wrap.png) + - Vereinfachte Version, bei der die Länge von Schlüssel und MAC kleiner sein muss als die Blockgröße + - Auffüllungen mit einem einzelnen ,,0''- oder ,,1''-Bit stellen sicher, dass verschiedene Datenblocktypen gut voneinander getrennt sind + # Zufallszahlengenerierung # Kryptographische Protokolle # Sichere Gruppenkommunikation @@ -744,4 +1635,49 @@ Standardisierte AES-Konfigurationen - [SR14] G. Schäfer, M. Rossberg - Netzsicherheit - [Sch96] B. Schneier - Applied Cryptography Second Edition: Protocols, Algorithms and Source Code in C - [Sta13] W. Stallings - Cryptography and Network Security: Principles and Practice -- [Sti05] D. R. Stinson - Cryptography: Theory and Practice (Discrete Mathematics and Its Applications) \ No newline at end of file +- [Sti05] D. R. Stinson - Cryptography: Theory and Practice (Discrete Mathematics and Its Applications) +- [Bre88a] D. M. Bressoud. - Factorization and Primality Testing +- [Cor90a] T. H. Cormen, C. E. Leiserson, R. L. Rivest. Introduction to Algorithms. +- [DH76] W. Diffie, M. E. Hellman - New Directions in Cryptography +- [ElG85a] T. ElGamal - A Public Key Cryptosystem and a Signature Scheme based on Discrete Logarithms. +- [Kob87a] N. Koblitz - A Course in Number Theory and Cryptography +- [Men93a] A. J. Menezes - Elliptic Curve Public Key Cryptosystems. +- [Niv80a] I. Niven, H. Zuckerman - An Introduction to the Theory of Numbers +- [RSA78] R. Rivest, A. Shamir und L. Adleman - A Method for Obtaining Digital Signatures and Public Key Cryptosystems +- [KAFL10] T. Kleinjung, K. Aoki, J. Franke, A. Lenstra, E. Thomé, J. Bos, P. Gaudry, A. Kruppa, P. Montgomery, D. Osvik, H. Te Riele, A.Timofeev, P. Zimmermann - Factorization of a 768-bit RSA modulus +- [LM10] M. Lochter, J. Merkle - Elliptic Curve Cryptography (ECC) Brainpool Standard Curves and Curve Generation +- [NIST99] NIST - Recommended Elliptic Curves for Federal Government Use +- [NIST12] NIST - Recommendation for Key Management: Part 1: General (Revision 3) +- [Ko87] N. Koblitz - Elliptic Curve Cryptosystems +- [BBP12] B.B. Brumley, M. Barbosa, D. Page, F. Vercauteren - Practical realisation and elimination of an ECC-related software bug attack +- [BT11] B.B. Brumley, N. Tuveri - Remote timing attacks are still practical +- [BLR08] D. Bernstein, T. Lange, R. Rezaeian Farashahi - Binary Edwards Curves +- [NIST09] NIST - Digital Signature Standard (DSS) +- [SM09] A. Sorniotti, R. Molva - A provably secure secret handshake with dynamic controlled matching +- [BF03] D. Boneh, M. Franklin - Identity-Based Encryption from the Weil Pairing +- [Sch85] R. Schoof - Elliptic Curves over Finite Fields and the Computation of Square Roots mod p +- [Kra97a] H. Krawczyk, M. Bellare, R. Canetti. HMAC: Keyed-Hashing for Message Authentication. Internet RFC 2104, February 1997. +- [Mer89a] R. Merkle. One Way Hash Functions and DES. Proceedings of Crypto ‘89, Springer, 1989 +- [Men97a] A. J. Menezes, P. C. Van Oorschot, S. A. Vanstone. Handbook of Applied Cryptography, CRC Press Series on Discrete Mathematics and Its Applications, Hardcover, 816 pages, CRC Press, 1997 +- [NIST02] National Institute of Standards and Technology (NIST). Secure Hash Standard. Federal Information Processing Standards Publication (FIPS PUB), 180-2, 2002 +- [Riv92a] R. L. Rivest. The MD5 Message Digest Algorithm. Internet RFC 1321, April 1992 +- [Rob96a] M. Robshaw. On Recent Results for MD2, MD4 and MD5. RSA Laboratories' Bulletin, No. 4, November 1996 +- [WYY05a] X. Wang, Y. L. Yin, H. Yu. Finding collisions in the full SHA-1. In Advances in Cryptology - CRYPTO'05, pages 18-36, 2005 +- [Yuv79a] G. Yuval. How to Swindle Rabin. Cryptologia, July 1979. +- [WLYF04] X. Wang, D. Feng, X. Lai, H. Yu. Collisions for Hash Functions MD4, MD5, HAVAL-128 and RIPEMD. IACR Eprint archive, 2004. +- [LWW05] A. Lenstra, X. Wang, B. de Weger. Colliding X.509 Certificates. Cryptology ePrint Archive: Report 2005/067. 2005 +- [LD05] S. Lucks, M. Daum. The Story of Alice and her Boss. In Rump session of Eurocrypt’05. 2005. +- [Kl06] V. Klima. Tunnels in Hash Functions: MD5 Collisions Within a Minute (extended abstract), Cryptology ePrint Archive: Report 2006/105, 2006 +- [SA09] Y. Sasaki, K. Aoki. Finding Preimages in Full MD5 Faster Than Exhaustive Search. Advances in Cryptology - EUROCRYPT’09. 2009 +- [Man11] M. Manuel. Classification and Generation of Disturbance Vectors for Collision Attacks against SHA-1. Journal Designs, Codes and Cryptography. Volume 59, Issue 1-3, pages 247-263, 2011 +- [GH04] H. Gilbert, H. Handschuh. Security Analysis of SHA-256 and Sisters. Lecture Notes in Computer Science, 2004, Volume 3006/2004, pages 175-193. 2004 +- [AGM09] K. Aoki, J. Guo, K. Matusiewicz, V. Sasaki, L. Wang. Preimages for Step-Reduced SHA-2. Advances in Cryptology - ASIACRYPT 2009. pages 578-597, 2009 +- [KK06] J. Kelsey, T. Kohno. Herding Hash Functions and the Nostradamus Attack. Advances in Cryptology - EUROCRYPT’06. 2006 +- [Jou04] A. Joux: Multicollisions in Iterated Hash Functions. Application to Cascaded Constructions. CRYPTO 2004: pages 306-316. 2004 +- [MV04] D. McGrew, J. Viega. The Security and Performance of the Galois/Counter Mode (GCM) of Operation (Full Version). [http://eprint.iacr.org/2004/193.](http://eprint.iacr.org/2004/193.) +- [Fer05] N. Ferguson. Authentication weaknesses in GCM. 2005 +- [Dwo07] M. Dworkin. Recommendation for Block Cipher Modes of Operation: Galois/Counter Mode (GCM) and GMAC. NIST Special Publication 800-38D. 2007 +- [Saa11] M. Saarinen. GCM, GHASH and Weak Keys. Cryptology ePrint Archive, Report 2011/202, [http://eprint.iacr.org/2011/202,](http://eprint.iacr.org/2011/202,) 2011 +- [BDP07] G. Bertoni, J. Daemen, M. Peeters, G. Van Assche. Sponge Functions. Ecrypt Hash Workshop 2007 +- [BDP11a] G. Bertoni, J. Daemen, M. Peeters, G. Van Assche. Cryptographic sponge functions. Research report. Version 0.1. 2011 +- [BDP11b] G. Bertoni, J. Daemen, M. Peeters, G. Van Assche. The Keccak reference. Research report. Version 3.0. 2011 \ No newline at end of file diff --git a/Praktikum Rechnerarchitekturen 1.pdf b/Praktikum Rechnerarchitekturen 1.pdf index 184495f..1aca217 100644 Binary files a/Praktikum Rechnerarchitekturen 1.pdf and b/Praktikum Rechnerarchitekturen 1.pdf differ diff --git a/Praktikum Rechnerarchitekturen 1.tex b/Praktikum Rechnerarchitekturen 1.tex index 5feea07..d831fd7 100644 --- a/Praktikum Rechnerarchitekturen 1.tex +++ b/Praktikum Rechnerarchitekturen 1.tex @@ -1,4 +1,4 @@ -\documentclass[a4paper,12pt,titlepage]{scrartcl} +\documentclass[a4paper,10pt,titlepage]{scrartcl} \usepackage[sc]{mathpazo} % Schrift - wie Funcky und in PDF zu Fonts beschrieben \usepackage[T1]{fontenc} \usepackage[utf8]{inputenc} @@ -10,6 +10,8 @@ \usepackage{float} \usepackage[iso,german]{isodate} %his package provides commands to switch between different date formats \usepackage{hyperref} +\usepackage[top=1.5cm, bottom=3cm, left=1.7cm, right=1.7cm, columnsep=20pt]{geometry} +\usepackage{multicol} \usepackage{listings} \usepackage{fancyhdr} @@ -40,7 +42,7 @@ captionpos=b, keepspaces=true, numbers=left, - numbersep=5pt, + numbersep=4pt, showspaces=false, showstringspaces=false, showtabs=false, @@ -53,14 +55,14 @@ \pagenumbering{roman} \titlehead { - \small - { - Technische Universität Ilmenau\\ - Fakulät IA\\ - Fachgebiet Rechnerarchitektur\\ + \small + { + Technische Universität Ilmenau\\ + Fakulät IA\\ + Fachgebiet Rechnerarchitektur\\ - Praktikum Rechnerarchitektur 1\\ - WS 2021/22} + Praktikum Rechnerarchitektur 1\\ + WS 2021/22} } \title {Versuchsprotokoll} @@ -115,14 +117,14 @@ Versuchsaufbau anhand einfacher Assemblerprogramme. Benutze parallele digitale E verzoe DD ? ;Eine Speicherzelle (Doppelwort) ziff DB 3FH,03H,6DH,67H,53H,76H,7EH,23H,7FH,77H \end{lstlisting} - - \begin{description} + +\begin{description} \item[anf] setzt die Länge der Wartezeit \item[m1] Lädt Register \item[m2] Zählt auf Sieben Segment Anzeige \item[m3] schreibt auf LED Reihe links und invertierend rechts - \item[zeit] Verbraucht Zeit nach "verzoe" - \end{description} + \item[zeit] Verbraucht Zeit nach "verzoe" +\end{description} \subsection*{Grundaufgabe b} \subsubsection*{einfaches Lauflicht} @@ -240,8 +242,8 @@ z1: DEC ECX \subsection*{Zusatzaufgabe} Erweiterungen des Programms nach eigenen Ideen: \begin{itemize} - \item symetrische LED Reihe zur Mitte - \item Sieben Segment zählt 9 Schritte mit + \item symetrische LED Reihe zur Mitte + \item Sieben Segment zählt 9 Schritte mit \end{itemize} \begin{lstlisting} anf: MOV Al, 80H @@ -285,20 +287,21 @@ z1: DEC ECX RET \end{lstlisting} +\newpage \section*{A2: Timerbaustein} Arbeite mit einem programmierbaren Interfacebaustein, der über eigene Register angesprochen wird. Als Beispiel dient ein Programmierbarer Intervalltimer (PIT, auch als „Zähler-Zeitgeber-Baustein“ oder „Timerbaustein“ bezeichnet) vom Typ 8254. \begin{center} - \begin{tabular}{| l | c | c | c | c | c | c | c | c | } - \hline - \multicolumn{9}{|c|}{Frequenzen der C-Dur Tonleiter}\\ - \hline - \hline - Ton & c' & d' & e' & f' & g' & a' & h' & c'' \\\hline - f(Hz) & 261,6 & 293,7 & 329,6 & 349,2 & 392,0 & 440,0 & 493,9 & 523,2 \\\hline - Zählkonstante & 7662 & 6825 & 6079 & 5730 & 5102 & 4545 & 4056 & 3824 \\\hline - Freq(Hex) & 1DEEH & 1AA9H & 17BFH & 1662H & 13EEH & 11C1 & FD8H & EF0H\\\hline - \end{tabular} + \begin{tabular}{| l | c | c | c | c | c | c | c | c | } + \hline + \multicolumn{9}{|c|}{Frequenzen der C-Dur Tonleiter} \\ + \hline + \hline + Ton & c' & d' & e' & f' & g' & a' & h' & c'' \\\hline + f(Hz) & 261,6 & 293,7 & 329,6 & 349,2 & 392,0 & 440,0 & 493,9 & 523,2 \\\hline + Zählkonstante & 7662 & 6825 & 6079 & 5730 & 5102 & 4545 & 4056 & 3824 \\\hline + Freq(Hex) & 1DEEH & 1AA9H & 17BFH & 1662H & 13EEH & 11C1 & FD8H & EF0H \\\hline + \end{tabular} \end{center} \subsection*{Grundaufgabe a} @@ -389,66 +392,296 @@ tonC: MOV AL, 000H JMP taste \end{lstlisting} -\subsection*{Zusatzaufgabe} - +\newpage \section*{A3: Matrixtastatur} -Eine 4x4 Matrixtastatur ist über Zeilen- und Spaltenleitungen verbunden. Um eine gedrückte Taste zu erkennen müssen alle Zeilen nacheinander abgefragt werden. Bei jedem Abfrageschnitt erhält man die Information über die gedrückten Tasten jeweils einer Zeile. +Eine 4x4 Matrixtastatur ist über Zeilen- und Spaltenleitungen verbunden. Um eine gedrückte Taste zu erkennen müssen alle Zeilen nacheinander abgefragt werden. Bei jedem Abfrageschnitt erhält man die Information über die gedrückten Tasten jeweils einer Zeile. \subsection*{Grundaufgabe a} -Alle Zeilen der Matrix je einmal abfragen und zurückkehren. Falls eine gedrückte Taste erkannt wurde, soll in einem gewählten Byteregister eine von Null verschiedene Tastennummer übergeben werden. +Alle Zeilen der Matrix je einmal abfragen und zurückkehren. Falls eine gedrückte Taste erkannt wurde, soll in einem gewählten Byteregister eine von Null verschiedene Tastennummer übergeben werden. Dies geschieht mit dem Unterprogramm \textit{matr}. -Tastaturbelegung: -\begin{tabular}{c|c|c|c} - 1 & 2 & 3 & 4\\ - 5 & 6 & 7 & 8\\ - 9 &10 &11 &12\\ - 13 &14 &15 &16 -\end{tabular} -\begin{lstlisting}[caption= matr] - -\end{lstlisting} +Wie \textit{matr} soll das Unterprogramm \textit{wmatr} alle Zeilen der Matrix abfragen aber erst beim Erkennen eines Tastendrucks zurückkehren. Das bedeutet, dass es das Drücken einer Taste abwartet und dann deren Nummer übergibt. -Wie \textit{matr} soll das Unterprogramm \textit{wmatr} alle Zeilen der Matrix abfragen aber erst beim Erkennen eines Tastendrucks zurückkehren. Das bedeutet, dass es das Drücken einer Taste abwartet und dann deren Nummer übergibt. -\begin{lstlisting}[caption= wmatr] - -\end{lstlisting} - -Zur Durchführung sollen die Unterprogramme nacheinander in einem Hauptprogramm aufgerufen werden. Das Hauptprogramm selbst soll in einer "ewigen" Schleife arbeiten und die erkannte Tastennummer binär auf einer der LED-Zeilen anzeigen. -\begin{lstlisting}[caption= mainA] - +Zur Durchführung sollen die Unterprogramme nacheinander in einem Hauptprogramm aufgerufen werden. Das Hauptprogramm selbst soll in einer "ewigen" Schleife arbeiten und die erkannte Tastennummer binär auf einer der LED-Zeilen anzeigen. +\begin{lstlisting}[caption=aufgabe 3a] +main: + CALL wmatr ; Tasten abfragen + MOV AL, BL ; Ausgabe vorbereiten + OUT 5Dh, AL ; Bits auf LED-Port + JMP main ; Schleife +matr: + IN AL, 5Ah ; Zeile einlesen + MOV BL, AL ; in Register B + SHL BL, 4 ; Bits nach oben schieben + IN AL, 5Bh ; Spalte einlesen + OR BL, AL ; Spalten & Zeilen zusammenfassen + RET +wmatr: + CALL matr ; Tasten abfragen + JNZ wmatr ; weiter wenn keine Taste gedrueckt +wloop: CALL matr ; Taste abfragen + JZ wloop ; weiter wenn Taste gedrueckt + RET \end{lstlisting} \subsection*{Grundaufgabe b} -Realisiere ein Programm, das die jeweils gedrückte Ziffer in lesbarer Darstellung auf der linken Stelle der Sieben-Segment-Anzeigen anzeigt. -\begin{lstlisting}[caption= mainB] - +\begin{multicols}{2} +Realisiere ein Programm, das die jeweils gedrückte Ziffer in lesbarer Darstellung auf der linken Stelle der Sieben-Segment-Anzeigen anzeigt. +Tastaturbelegung: + +\begin{center} + \begin{tabular}{c|c|c|c} + 0 & 1 & 2 & 3 \\ + 4 & 5 & 6 & 7 \\ + 8 & 9 & - & - \\ + - & - & - & - + \end{tabular} +\end{center} +\end{multicols} + +\begin{lstlisting}[caption=aufgabe 3b] + MOV DX, 0BBh ; Startwertpointer 7Seg.Anzeige +anf: + CALL wmatr ; Tasten abfragen + CALL ziff ; Ziffern abfragen + CALL anz ; Ausgabe auf Anzeige + JMP anf +matr: + IN AL, 5Ah ; Zeile einlesen + MOV BL, AL ; in Register B sichern + SHL BL, 4 ; Bits nach oben schieben + IN AL, 5Bh ; Spalte einlesen + OR BL, AL ; Spalten & Zeilen in Byte zusammenfassen + RET +wmatr: + CALL matr ; Tasten abfragen + JNZ wmatr ; weiter wenn keine Taste gedrueckt +w2: CALL matr ; Taste abfragen + JZ w2 ; weiter wenn Taste gedrueckt + RET +ziff: + CMP BL, 17h + JNC z1 + MOV BH, 3Fh + RET +z1: CMP BL, 18h + JNC z2 + MOV BH, 03h + RET +z2: CMP BL, 20h + JNC z3 + MOV BH, 6Dh + RET +z3: CMP BL, 24h + JNC z4 + MOV BH, 67h + RET +z4: CMP BL, 33h + JNC z5 + MOV BH, 53h + RET +z5: CMP BL, 34h + JNC z6 + MOV BH, 76h + RET +z6: CMP BL, 36h + JNC z7 + MOV BH, 7Eh + RET +z7: CMP BL, 40h + JNC z8 + MOV BH, 23h + RET +z8: CMP BL, 65h + JNC z9 + MOV BH, 7Fh + RET +z9: CMP BL, 66h + JNC zq + MOV BH, 77h + RET +zq: MOV BH, 04h + RET +anz: + MOV AL, BH + OUT DX, AL + RET \end{lstlisting} \subsection*{Fortgeschrittene Aufgabe c} -Erweitere das Programm so dass gedrückte Ziffern der Reihe nach nebeneinander angezeigt werden und beim erreichen der letzten Stelle wieder links beginnt. +Erweitere das Programm so dass gedrückte Ziffern der Reihe nach nebeneinander angezeigt werden und beim erreichen der letzten Stelle wieder links beginnt. Das Drücken einer nicht als Ziffer definierten Taste soll eine leere Stelle erzeugen. -\begin{lstlisting}[caption= mainC] - +\begin{lstlisting}[caption= aufgabe 3c] + MOV DX, 0BBh ; Startwertpointer 7Seg.Anzeige +anf: + CALL wmatr ; Tasten abfragen + CALL ziff ; Ziffern abfragen + CALL anz ; Ausgabe auf Anzeige + JMP anf +matr: + IN AL, 5Ah ; Zeile einlesen + MOV BL, AL ; in Register B sichern + SHL BL, 4 ; Bits nach oben schieben + IN AL, 5Bh ; Spalte einlesen + OR BL, AL ; Spalten & Zeilen in Byte zusammenfassen + RET +wmatr: + CALL matr ; Tasten abfragen + JNZ wmatr ; weiter wenn keine Taste gedrueckt +w2: CALL matr ; Taste abfragen + JZ w2 ; weiter wenn Taste gedrueckt + RET +ziff: + CMP BL, 17h + JNC z1 + MOV BH, 3Fh + RET +z1: CMP BL, 18h + JNC z2 + MOV BH, 03h + RET +z2: CMP BL, 20h + JNC z3 + MOV BH, 6Dh + RET +z3: CMP BL, 24h + JNC z4 + MOV BH, 67h + RET +z4: CMP BL, 33h + JNC z5 + MOV BH, 53h + RET +z5: CMP BL, 34h + JNC z6 + MOV BH, 76h + RET +z6: CMP BL, 36h + JNC z7 + MOV BH, 7Eh + RET +z7: CMP BL, 40h + JNC z8 + MOV BH, 23h + RET +z8: CMP BL, 65h + JNC z9 + MOV BH, 7Fh + RET +z9: CMP BL, 66h + JNC zq + MOV BH, 77h + RET +zq: CMP BL, 77h + JNC z1 + MOV BH, 04h + RET +anz: + MOV AL, BH + OUT DX, AL + CMP DX, 0B0h + JC rst + DEC DX + RET +rst: MOV DX, 0BBh + RET \end{lstlisting} \subsection*{Fortgeschrittene Aufgabe d} -Verhindere das Prellen der Tasten durch Software um doppelte Tastendrücke zu vermeiden. -\begin{lstlisting}[caption= mainD] - +Verhindere das Prellen der Tasten durch Software um doppelte Tastendrücke zu vermeiden. +\begin{lstlisting}[caption= aufgabe 3d] + MOV DX, 0BBh ; Startwertpointer 7Seg.Anzeige +anf: + CALL wmatr ; Tasten abfragen + CALL ziff ; Ziffern abfragen + CALL anz ; Ausgabe auf Anzeige + JMP anf +matr: + MOV ECX, 50000h ; Entprelltimer +t: DEC ECX + JNZ t + IN AL, 5Ah ; Zeile einlesen + MOV BL, AL ; in Register B sichern + SHL BL, 4 ; Bits nach oben schieben + IN AL, 5Bh ; Spalte einlesen + OR BL, AL ; Spalten & Zeilen in Byte zusammenfassen + RET +wmatr: + CALL matr ; Tasten abfragen + JNZ wmatr ; weiter wenn keine Taste gedrueckt +w2: CALL matr ; Taste abfragen + JZ w2 ; weiter wenn Taste gedrueckt + RET +ziff: + CMP BL, 17h + JNC z1 + MOV BH, 3Fh + RET +z1: CMP BL, 18h + JNC z2 + MOV BH, 03h + RET +z2: CMP BL, 20h + JNC z3 + MOV BH, 6Dh + RET +z3: CMP BL, 24h + JNC z4 + MOV BH, 67h + RET +z4: CMP BL, 33h + JNC z5 + MOV BH, 53h + RET +z5: CMP BL, 34h + JNC z6 + MOV BH, 76h + RET +z6: CMP BL, 36h + JNC z7 + MOV BH, 7Eh + RET +z7: CMP BL, 40h + JNC z8 + MOV BH, 23h + RET +z8: CMP BL, 65h + JNC z9 + MOV BH, 7Fh + RET +z9: CMP BL, 66h + JNC zq + MOV BH, 77h + RET +zq: CMP BL, 77h + JNC z1 + MOV BH, 04h + RET +anz: + MOV AL, BH + OUT DX, AL + CMP DX, 0B0h + JC rst + DEC DX + RET +rst: MOV DX, 0BBh + RET \end{lstlisting} \subsection*{Zusatzaufgabe} -Realisiere einen einfachen Taschenrechner der einstellige nichtnegative Dezimalzahlen addiert und das ein- bis zweistellige Ergebnis auf der Sieben-Segment-Anzeige anzeigt. -Definiere dafür Tasten für ,,+'' und ,,=''. -\begin{tabular}{c|c|c|c} - 1 & 2 & 3 & 4\\ - 5 & 6 & 7 & 8\\ - 0 & 0 & 0 & 0\\ - + & 0 & 0 & = -\end{tabular} +Realisiere einen einfachen Taschenrechner der einstellige nichtnegative Dezimalzahlen addiert und das ein- bis zweistellige Ergebnis auf der Sieben-Segment-Anzeige anzeigt. +Definiere dafür Tasten für ,,+'' und ,,=''. + +\begin{center} + \begin{tabular}{c|c|c|c} + 1 & 2 & 3 & 4 \\ + 5 & 6 & 7 & 8 \\ + 0 & 0 & 0 & 0 \\ + + & 0 & 0 & = + \end{tabular} +\end{center} \begin{lstlisting}[caption= addition] diff --git a/README.md b/README.md index dac98e2..e14c99d 100644 --- a/README.md +++ b/README.md @@ -33,11 +33,14 @@ Mitschriften und selbst geschriebene Unterlagen und Hilfen zu Informatik Vorlesu - [Network Security](Network%20Security.md) - [Neurobiologische Informationsverarbeitung](Neurobiologische%20Informationsverarbeitung.md) - [Neuroinformatik](Neuroinformatik.md) (letzte 2 Kapitel fehlen) +- Praktika + - [Neuroinformatik](Praktikum%20Neuroinformatik.pdf) + - [Rechnerarchitekturen 1](Praktikum%20Rechnerarchitekturen%201.pdf) + - [Rechnerarchitekturen 2](Praktikum%20Rechnerarchitekturen%202.pdf) + - [Schaltsysteme](Praktikum%20Schaltsysteme.pdf) - [Programmierparadigmen](Programmierparadigmen.md) - [LaTex Version](Programmierparadigmen.pdf) - [Rechnerarchitekturen 1](Rechnerarchitekturen%201.md) - - [Praktikum A1](Rechnerarchitekturen%201%20-%20Praktikum%20A1.pdf) - - [Praktikum A2](Rechnerarchitekturen%201%20-%20Praktikum%20A2.pdf) - [Rechnerarchitekturen 2](Rechnerarchitekturen%202.md) - [Schaltsysteme](Schaltsysteme.md) - [Softwareprojekt 2021](Softwareprojekt%202021.md) diff --git a/Rechnerarchitekturen 1 - Praktikum A1.pdf b/Rechnerarchitekturen 1 - Praktikum A1.pdf deleted file mode 100644 index a0e2f3c..0000000 Binary files a/Rechnerarchitekturen 1 - Praktikum A1.pdf and /dev/null differ diff --git a/Rechnerarchitekturen 1 - Praktikum A1.tex b/Rechnerarchitekturen 1 - Praktikum A1.tex deleted file mode 100644 index 517e424..0000000 --- a/Rechnerarchitekturen 1 - Praktikum A1.tex +++ /dev/null @@ -1,264 +0,0 @@ -\documentclass[10pt, a4paper]{report} -\usepackage[utf8]{inputenc} -\usepackage[ngerman]{babel} -\usepackage{datetime} -\usepackage[]{amsmath} -\usepackage[]{amsthm} -\usepackage[]{amssymb} -\usepackage{listings} -\usepackage{xcolor} -\usepackage{fancyhdr} - -\pagestyle{fancy} -\fancyhf{} -\lhead{Rechnerarchitekturen 1 - Praktikum A1 - WS 20/21} -\rfoot{Page \thepage} - -\definecolor{codegreen}{rgb}{0,0.6,0} -\definecolor{codegray}{rgb}{0.5,0.5,0.5} -\definecolor{codepurple}{rgb}{0.58,0,0.82} -\definecolor{backcolour}{rgb}{0.95,0.95,0.92} - -%Code listing style named "mystyle" -\lstdefinestyle{mystyle}{ - backgroundcolor=\color{backcolour}, - commentstyle=\color{codegreen}, - keywordstyle=\color{magenta}, - numberstyle=\tiny\color{codegray}, - stringstyle=\color{codepurple}, - basicstyle=\ttfamily\footnotesize, - breakatwhitespace=false, - breaklines=true, - captionpos=b, - keepspaces=true, - numbers=left, - numbersep=5pt, - showspaces=false, - showstringspaces=false, - showtabs=false, - tabsize=2 -} - -%"mystyle" code listing set -\lstset{style=mystyle} - -\newdateformat{myformat}{\THEDAY{ten }\monthname[\THEMONTH], \THEYEAR} - -\title{Rechnerarchitekturen 1 - Praktikum A1} -\date\today -\begin{document} - -\section*{ Grundaufgabe a: Funktionen ermitteln} -\begin{lstlisting}[language=Assembler] -; Programmbereich: -anf: MOV EDX,400000H ;Groessee der Verzoegerung - MOV [verzoe],EDX ;Verzoegerung speichern - -m1: MOV EDI,10 ;EDI=10 - MOV ESI,OFFSET ziff ;Adresse von ziff in ESI - -m2: MOV AL,[ESI+EDI-1] ;AL=ziff+9 - OUT 0B0H,AL ;SiebenSegment schreibt AL - CALL zeit ;warten - DEC EDI ;EDI=EDI-1 - JNZ m2 ;if(EDI!=0) goto m2 - - MOV AL,0FFH ;AL=255 (dec) -m3: OUT 5CH,AL ;LED Reihe links schreiben - NOT AL ;AL negieren - OUT 5DH,AL ;LED Reihe rechts schreiben - CALL zeit ;warten - MOV BL,AL ;Inhalt von AL wird noch gebraucht - IN AL,59H ;Tastenreihe rechts lesen auf AL - BT EAX,7 ;Bit 7 von EAX in Carry Flag - MOV AL,BL ;AL bekommt alten Wert zurueck - JC m1 ;if(m1==0) goto m1 - JMP m3 ;goto m3 (Loop) - -;zeit ist ein Unterprogramm, welches nur Zeit verbrauchen soll: -zeit: MOV ECX,[verzoe] ;Lade wartezeit -z1: DEC ECX ;ECX=ECX-1 - JNZ z1 ;if(ECX!=0) goto z1 - RET ;zurueck zum Hauptprogramm - -; Datenbereich: -verzoe DD ? ;Eine Speicherzelle (Doppelwort) -ziff DB 3FH,03H,6DH,67H,53H,76H,7EH,23H,7FH,77H -\end{lstlisting} - -\begin{description} - \item[anf] setzt die Länge der Wartezeit - \item[m1] Lädt Register - \item[m2] Zählt auf Sieben Segment Anzeige - \item[m3] schreibt auf LED Reihe links und invertierend rechts - \item[zeit] Verbraucht Zeit nach "verzoe" -\end{description} - -\clearpage - -\section*{ Grundaufgabe b: Programmentwurf} -\subsection*{einfaches Lauflicht} -auf der rechten LED-Reihe soll ein sichtbarer Lichtpunkt von links nach rechts laufen und immer wieder von links beginnen - -\begin{lstlisting}[language=Assembler] -anf: MOV EDX,400000H - MOV [verzoe],EDX - - MOV AL, 80H ;Startwert fuer LED Reihe -lauf: OUT 5CH, AL ;Wert auf LED Reihe schreiben - CALL zeit ;warten - ROR AL, 1 ;Bits um 1 nach rechts - JMP lauf ;Schleife wiederholen - -zeit: MOV ECX,[verzoe] -z1: DEC ECX - JNZ z1 - RET -\end{lstlisting} - - - -\subsection*{Lauflicht mit Geschwindigkeitsumschalter} -das Lauflicht soll durch den linken Schalter zwischen "schnell" (Schalter oben) und "langsam" (Schalter unten) umschalten - -\begin{lstlisting}[language=Assembler] -anf: MOV Al, 80H - -lauf: MOV EDX, 400000H ; Wert fuer "langsam" - MOV [verzoe], EDX ;"langsam" in Speicher - OUT 5CH, AL ;LED Reihe schreiben - MOV BL, AL ;AL speichern - IN AL, 58H ;Schalter einlesen - BT AL, 7 ;7. Bit von AL in Carry Flag - JNC langsam ;Carry Flag = 0, schalter unten - MOV EDX, 200000H ; Wert fuer "schnell" - MOV [verzoe], EDX ;"schnell" in Speicher - CMC ;Carry Flag umschalten (0) - -langsam: CALL zeit ;warten - MOV AL, BL ;AL aus speicher zurueck - ROR AL,1 ;Bits um 1 nach rechts - JMP anf ;Schleife wiederholen - -zeit: MOV ECX,[verzoe] -z1: DEC ECX - JNZ z1 - RET -\end{lstlisting} - -\clearpage - -\subsection*{Lauflicht verändert Richtung} -zusätzlich zum oben implementierten soll die Bewegungsrichtung des Lichtpunktes durch den rechten Schalter der Schalterreihe zwischen "nach links" und "nach rechts" wechseln. - -\begin{lstlisting}[language=Assembler] -anf: MOV Al, 80H -lauf: MOV EDX, 400000H ; Wert fuer "langsam" - MOV [verzoe], EDX ;"langsam" in Speicher - OUT 5CH, AL ;LED Reihe schreiben - MOV BL, AL ;AL speichern - IN AL, 58H ;Schalter einlesen - BT AL, 7 ;7. Bit von AL in Carry Flag - JNC langsam ;Carry Flag = 0, Schalter unten - MOV EDX, 200000H ; Wert fuer "schnell" - MOV [verzoe], EDX ;"schnell" in Speicher - CMC ;Carry Flag umschalten -langsam: CALL zeit ;warten - MOV AL, BL ;AL aus speicher zurueck - BT AL, 0 ;0. Bit von AL in Carry Flag - JNC rechts ;Carry Flag = 1; Schalter oben - ROL AL,1 ;Bits um 1 nach links - CMC ;Carry Flag umschalten (0) - JMP anf ;Schleife wiederholen -rechts: ROR AL, 1 ;Bits um 1 nach rechts - JMP anf ;Schleife wiederholen -zeit: MOV ECX,[verzoe] -z1: DEC ECX - JNZ z1 - RET -\end{lstlisting} - - -\subsection*{Lauflicht mit Invertierung} -durch drücken einer beliebigen Taste der blauen Tastenreihe wird die Anzeige invertiert, d.h. der Lichtpunkt ist dunkel etc. Invertierung nur solange die Taste gedrückt wird. -\begin{lstlisting}[language=Assembler] -anf: MOV Al, 80H -lauf: MOV EDX, 400000H ; Wert fuer "langsam" - MOV [verzoe], EDX ;"langsam" in Speicher - MOV BL, AL ;Kopie von AL anlegen - IN AL, 59H ;Tastenreihe einlesen - AND AL, FFH ;UND Operation mit FF - JZ nopress ;kein Schalter gedrueckt - NOT BL ;BL invertieren - MOV AL, BL ;AL ueberschreiben -nopress: OUT 5CH, AL ;LED Reihe schreiben - IN AL, 58H ;Schalter einlesen - BT AL, 7 ;7. Bit von AL in Carry Flag - JNC langsam ;Carry Flag = 0, Schalter unten - MOV EDX, 200000H ; Wert fuer "schnell" - MOV [verzoe], EDX ;"schnell" in Speicher - CMC ;Carry Flag umschalten -langsam: CALL zeit ;warten - MOV AL, BL ;AL aus speicher zurueck - BT AL, 0 ;0. Bit von AL in Carry Flag - JNC rechts ;Carry Flag = 1; Schalter oben - ROL AL,1 ;Bits um 1 nach links - CMC ;Carry Flag umschalten (0) - JMP anf ;Schleife wiederholen -rechts: ROR AL, 1 ;Bits um 1 nach rechts - JMP anf ;Schleife wiederholen -zeit: MOV ECX,[verzoe] -z1: DEC ECX - JNZ z1 - RET -\end{lstlisting} - - -\subsection*{Zusatzaufgabe} -Erweiterungen des Programms nach eigenen Ideen: -\begin{itemize} - \item symetrische LED Reihe zur Mitte - \item Sieben Segment zählt 9 Schritte mit -\end{itemize} -\begin{lstlisting}[language=Assembler] -anf: MOV Al, 80H - MOV EDI, 0 - MOV ESI, OFFSET ziff -lauf: MOV EDX, 400000H ; Wert fuer "langsam" - MOV [verzoe], EDX ;"langsam" in Speicher - MOV BL, AL ;Kopie von AL anlegen - IN AL, 59H ;Tastenreihe einlesen - AND AL, FFH ;UND Operation mit FF - JZ nopress ;kein Schalter gedrueckt - NOT BL ;BL invertieren - MOV AL, BL ;AL ueberschreiben -nopress: OUT 5CH,AL ;LED Reihe links schreiben - NOT AL ;AL negieren - OUT 5DH,AL ;LED Reihe rechts schreiben - MOV BH,[ESI+EDI-1] ;Sieben Segment berechnen - OUT 0B0H,BH ;Sieben Segment schreiben - DEC EDI ;Sieben Segment runterzaehlen - JZ timer ;Timer auf 0 setzen - IN AL, 58H ;Schalter einlesen - BT AL, 7 ;7. Bit von AL in Carry Flag - JNC langsam ;Carry Flag = 0, Schalter unten - MOV EDX, 200000H ; Wert fuer "schnell" - MOV [verzoe], EDX ;"schnell" in Speicher - CMC ;Carry Flag umschalten -langsam: CALL zeit ;warten - MOV AL, BL ;AL aus speicher zurueck - BT AL, 0 ;0. Bit von AL in Carry Flag - JNC rechts ;Carry Flag = 1; Schalter oben - ROL AL,1 ;Bits um 1 nach links - CMC ;Carry Flag umschalten (0) - JMP anf ;Schleife wiederholen -rechts: ROR AL, 1 ;Bits um 1 nach rechts - JMP anf ;Schleife wiederholen -timer: MOV BH, 0FFH - RET -zeit: MOV ECX,[verzoe] -z1: DEC ECX - JNZ z1 - RET -\end{lstlisting} -\end{document} \ No newline at end of file diff --git a/Rechnerarchitekturen 1 - Praktikum A2.pdf b/Rechnerarchitekturen 1 - Praktikum A2.pdf deleted file mode 100644 index 2a4c0e3..0000000 Binary files a/Rechnerarchitekturen 1 - Praktikum A2.pdf and /dev/null differ diff --git a/Rechnerarchitekturen 1 - Praktikum A2.tex b/Rechnerarchitekturen 1 - Praktikum A2.tex deleted file mode 100644 index e14dba5..0000000 --- a/Rechnerarchitekturen 1 - Praktikum A2.tex +++ /dev/null @@ -1,155 +0,0 @@ -\documentclass[10pt, a4paper]{report} -\usepackage[utf8]{inputenc} -\usepackage[ngerman]{babel} -\usepackage{datetime} -\usepackage[]{amsmath} -\usepackage[]{amsthm} -\usepackage[]{amssymb} -\usepackage{listings} -\usepackage{xcolor} -\usepackage{fancyhdr} - -\pagestyle{fancy} -\fancyhf{} -\lhead{Rechnerarchitekturen 1 - Praktikum A2 - WS20/21} -\rfoot{Page \thepage} - -\definecolor{codegreen}{rgb}{0,0.6,0} -\definecolor{codegray}{rgb}{0.5,0.5,0.5} -\definecolor{codepurple}{rgb}{0.58,0,0.82} -\definecolor{backcolour}{rgb}{0.95,0.95,0.92} - -%Code listing style named "mystyle" -\lstdefinestyle{mystyle}{ - backgroundcolor=\color{backcolour}, - commentstyle=\color{codegreen}, - keywordstyle=\color{magenta}, - numberstyle=\tiny\color{codegray}, - stringstyle=\color{codepurple}, - basicstyle=\ttfamily\footnotesize, - breakatwhitespace=false, - breaklines=true, - captionpos=b, - keepspaces=true, - numbers=left, - numbersep=5pt, - showspaces=false, - showstringspaces=false, - showtabs=false, - tabsize=2 -} - -%"mystyle" code listing set -\lstset{style=mystyle} - -\newdateformat{myformat}{\THEDAY{ten }\monthname[\THEMONTH], \THEYEAR} - -\title{Rechnerarchitekturen 1 - Praktikum A2} -\author{} -\date\today -\begin{document} - - -\begin{center} - \begin{tabular}{| l | c | c | c | c | c | c | c | c | } - \hline - \multicolumn{9}{|c|}{Frequenzen der C-Dur Tonleiter}\\ - \hline - \hline - Ton & c' & d' & e' & f' & g' & a' & h' & c'' \\\hline - f(Hz) & 261,6 & 293,7 & 329,6 & 349,2 & 392,0 & 440,0 & 493,9 & 523,2 \\\hline - Zählkonstante & 7662 & 6825 & 6079 & 5730 & 5102 & 4545 & 4056 & 3824 \\\hline - Freq(Hex) & 1DEEH & 1AA9H & 17BFH & 1662H & 13EEH & 11C1 & FD8H & EF0H\\\hline - \end{tabular} -\end{center} - -\section*{ Grundaufgabe a)} -\scriptsize{Der Kanal 0 des Timerbausteins soll als programmierbarer Frequenzgenerator benutzt werden. Dazu wird die Betriebsart „Mode 3“ verwendet (Frequenzteiler mit symmetrischer Rechteckschwingung am Output). Die Output-Frequenz soll 440 Hz betragen. Als Input benutzen Sie den eingebauten 2-MHz-Generator.} -$$\text{Zählkonstante: } \frac{2 MHz}{440 Hz} = 4545,4545 = (11C1)_{16}$$ -\begin{lstlisting} - MOV AL, 36H; Steuerbyte 00110110 - OUT 57H, AL - MOV AL, 0C1H; LSB - OUT 54H, Al - MOV AL, 011H; MSB - OUT 54H, AL -\end{lstlisting} - - -\section*{ Grundaufgabe b)} -\scriptsize{Schalten Sie die Tonausgabe zunächst wieder ab und erweitern Sie das Programm um die Initialisierung der PIT-Kanäle 1 und 2. Die am Output des Kanals 2 angeschlossene LED soll mit einer Periodendauer von 0,5s blinken. Es ist wiederum Mode 3 zu benutzen. Da beide Kanäle hintereinander geschaltet (kaskadiert) sind, müssen Sie die benötigte Frequenzteilung auf beide Kanäle aufteilen. Außer der LED haben Sie diesmal keine weitere Kontrollmöglichkeit. } -$$\text{Zählkonstante: } \frac{2 MHz}{2 Hz} /2 = 1000000 / 2 = 500000$$ -\begin{lstlisting} - MOV AL, 0B6H; Kanal 2 - OUT 57H, AL - MOV AL, 0FFH - OUT 56H, AL - MOV AL, 0FFH - OUT 56H, AL - - MOV AL, 076H ;Kanal 1 - OUT 57H, AL - MOV AL, 0FFH - OUT 55H, AL - MOV AL, 0FFH - OUT 56H, AL - -\end{lstlisting} -\clearpage - -\section*{ Grundaufgabe c)} -\scriptsize{Die Tonausgabe von Kanal 0 wird wieder eingeschaltet. Sie soll jetzt aber nur noch dann aktiv sein, wenn gerade eine beliebige Taste in der blauen Tastenreihe gedrückt ist. Dazu müssen Sie in der Endlosschleife des Programms eine entsprechende Abfrage einbauen.} - -\begin{lstlisting} -noton: MOV AL, 59H - OUT 57H, AL -taste: IN AL, 59H - AND AL, 0FFH - JZ noton ;keine taste gedrueckt - JMP ton -ton: MOV AL, 0C1H - OUT 54H, AL - MOV AL, 011H - OUT 54H, AL - JMP taste -\end{lstlisting} - -\section*{ Fortgeschrittene Aufgabe d)} -\scriptsize{Erweitern Sie das Programm dann so, dass den einzelnen Tasten unterschiedliche Frequenzen zugeordnet sind. Es wird angenommen, dass nicht mehrere Tasten gleichzeitig gedrückt werden. Das Blinken der LED von Aufgabe b) soll weiterhin funktionieren. } - -\begin{lstlisting} -noton: MOV AL, 59H - OUT 57H, AL -taste: IN AL, 59H - MOV BL, AL - AND AL, 0FFH - JZ noton ;keine taste gedrueckt - MOV AL, BL - AND AL, 001H ; Taste A - JNZ tonA - MOV AL, BL - AND AL, 003H ; Taste B - JNZ tonB - MOV AL, BL - AND AL, 004H ;Taste C - JNZ tonC - JMP taste -tonA: MOV AL, 0C1H - OUT 54H, AL - MOV AL, 011H - OUT 54H, AL - JMP taste -tonB: MOV AL, 008H - OUT 54H, AL - MOV AL, 0FDH - OUT 54H, AL - JMP taste -tonC: MOV AL, 000H - OUT 54H, AL - MOV AL, 0EFH - OUT 54H, AL - JMP taste - -\end{lstlisting} - -\end{document} \ No newline at end of file