diff --git a/20220519/ad-20220519.txt b/20220519/ad-20220519.txt
index 1403571d3ba53c5c847b3a25a2361f02b0d78b9f..1b7b3f76dee654b06b7dee25ca00d9599998f5e1 100644
--- a/20220519/ad-20220519.txt
+++ b/20220519/ad-20220519.txt
@@ -29,7 +29,7 @@ Damit sich die Teams nicht gegenseitig blockieren:
  - "Dummy"-Funktionen für 64-Bit-Zahlen schreiben,
    um damit schon mal die Schnittstelle festzulegen.
 
- - Später dann die Dummy-FUnktionen gegen die richtigen austauschen.
+ - Später dann die Dummy-Funktionen gegen die richtigen austauschen.
 
 Beispiel:
 
diff --git a/20220609/ad-20220609.txt b/20220609/ad-20220609.txt
new file mode 100644
index 0000000000000000000000000000000000000000..ff9a82a8cc194c0b3f4a8a86e60769babc8ed1f5
--- /dev/null
+++ b/20220609/ad-20220609.txt
@@ -0,0 +1,181 @@
+Fehlererkennung und Fehlerkorrektur
+===================================
+
+Parität, 09.06.2022, 11:05:40
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Nachricht enthält n Datenbits und ein Paritäts-Bit.
+ - Ungerade Parität: Die Gesamtzahl der Eins-Bits muß ungerade sein.
+   ungerade Anzahl von Daten-1-Bits --> Paritäts-Bit muß 0 sein.
+   gerade Anzahl von Daten-1-Bits --> Paritäts-Bit muß 1 sein.
+ - Gerade Parität: Die Gesamtzahl der Eins-Bits muß gerade sein.
+
+Anders formuliert: Die n+1-Bit-Zahl aus den Datenbits und dem Paritäts-Bit
+  ... muß insgesamt ungerade/gerade sein.
+  = ... muß bei Division durch 2 einen vorgegebenen Rest liefern.
+
+Nachteil: nur 1 Bit-Fehler erkennbar
+
+Verbesserungsidee: durch etwas anderes teilen
+
+CRC, 09.06.2022, 11:05:27
+~~~~~~~~~~~~~~~~~~~~~~~~~
+Nachricht enthält n Datenbits und m Paritäts-Bits.
+
+Wir betrachten die n+m-Bit-Zahl als ein Polynom über { 0, 1 } (mod 2).
+
+CRC: Bei Polynomdivision muß ein vorgegebener Rest bleiben.
+     (Siehe "Tafelbild".)
+
+--> sehr zuverlässige Fehlererkennung,
+    sehr leicht zu implementieren, auch in Hardware
+
+--> nicht geeignet gegen gezielte Manipulation
+
+Kryptographische Hash-Funktionen, 09.06.2022, 13:02:24
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Spezielle Funktionen: Nur 1 Bit anders im Input --> völlig anderer Output
+
+Für digitale Signaturen:
+ - nicht mehr empfohlen: MD5
+ - aktuell empfohlen: SHA-2 (= SHA-224, SHA-256, SHA-384 und SHA-512)
+   NICHT empfohlen für Passwort-Hashes
+
+Passwort-Hashes:
+ - Wir speichern Passwörter nicht im Klartext, sondern als Hashes.
+   Es ist nicht möglich, vom Hash auf das Passwort zu schließen.
+ - Authentifizierung: Der Server kennt das Passwort nicht, sondern nur den Hash.
+   Der Benutzer gibt das Passwort ein.
+   Der Server berechnet den Hash und prüft, ob dieser stimmt.
+   Er merkt sich insbesondere nicht das Passwort.
+ - Salt: Wir speichern eine zusätzliche Zufallszahl auf dem Server
+   und bilden den Hash über das Passwort zusammen mit der Zufallszahl.
+    - Man sieht nicht sofort, wenn Passwörter (zufällig) gleich sind.
+    - Man kann keine Hashes "auf Vorrat" anlegen.
+      Beispiel:
+       - Alle Benutzer verwenden Passwörter von 8 Zeichen Länge.
+         Dies entspricht etwa 8 * 6 = 48 Bits Zufall.
+       - Ein Angreifer berechnet "auf Vorrat" die Hashes aller 48-Bit-Zahlen.
+       - Aus einer versehentlich öffentlich gewordenen Tabelle ("Leak")
+         lassen sich leicht die Passwörter rekonstruieren.
+       - Gegenmaßnahme: Salt, z.B. 8 Bit
+         --> Die "Vorratstabelle" müßte dann nicht mehr "nur" alle 48-Bit-Zahlen
+             erfassen, sondern alle 56-Bit-Zahlen.
+         --> Obwohl das Salt bekannt ist (Teil der Tabelle),
+             erhöht es die Sicherheit.
+ - Problem mit SHA-2 als Passwort-Hash:
+   SHA-2 läßt sich schnell berechnen, insbesondere mit GPUs.
+   --> Durchprobieren riesiger Mengen von Passwörtern geht relativ schnell,
+       auch mit Salt.
+   Trotzdem hilft auch hier das Salt, denn es verhindert,
+   daß man mehrere Passwörter gleichzeitig angreift.
+ - Für diesen Zweck geeignetere Hash-Funktionen:
+   bcrypt, scrypt, argon2, evtl. auch pbkdf2
+   Nicht leicht auf GPUs berechenbar, insgesamt langsamer.
+   --> Möglicherweise daher für kryptographische Signaturen schlechter geeignet,
+       {weil dort größere Datenmengen ge"hash"t werden}
+       weil dort Hashes über größere Datenmengen gebildet werden.
+   --> Bei kryptographischen Signaturen besteht nicht das Problem
+       {mit der ge"leak"ten Nachricht nicht,}
+       mit der versehentlich öffentlich gewordenen Nachricht nicht,
+       denn die Nachricht ist ja absichtlich öffentlich
+       (Falls nicht, hilft Verschlüsselung.)
+       bzw. weil es ohnehin aussichtslos ist, anhand des kryptographischen Hashes
+       die Nachricht zu erraten.
+
+Fehlerkorrektur, 09.06.2022, 13:36:48
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Hamming-Code: siehe frühere Lehrveranstaltungen
+https://www.cvh-server.de/~pgerwinski/net-2013ss.pdf, Seite 28 bis 30
+
+Reed-Solomon-Code: Fehlererkennung und -Korrektur
+
+ - Anwendung: QR-Codes, optische Datenträger, Raumsonde Voyager 2
+
+ - Prinzip: Funktionsgraphen von Polynomen
+   3 Punkte --> eindeutig für Polynom 2. Grades
+   4 Punkte --> Polynom 2. Grades überbestimmt
+   4 Punkte, einer falsch --> Polynom 2. Grades paßt nicht --> Fehlererkennung
+   5 Punkte --> auch Fehlerkorrektur möglich, notfalls durch Ausprobieren
+                (die richtige Parabel kommt häufiger vor)
+   --> "einstellbares" Fehlererkennungs- und korrekturverfahren:
+       nur 3 Punkte: keine Fehlererkennung und -korrektur, nur die Daten
+       4 Punkte: Fehlererkennung
+       5 Punkte: Fehlererkennung, 1 Fehler korrigieren
+       6 Punkte: Fehlererkennung, 2 Fehler korrigieren
+       ...
+
+ - In der Praxis: Polynom über endlichem Körper, z.B. mit 5 Elementen
+   Mathematik: Dies funktioniert alles genauso wie in den reellen Zahlen.
+   Z.B.: Man vereinbart vorher die Stützstellen (x-Koordinaten)
+   und übermittelt die Funktionswerte (y-Koordinaten).
+
+   ( { 0, 1, 2, 3, 4 }, +, · ) (mod 5)
+
+   Stützstellen: alle, also 0, 1, 2, 3, 4
+
+   Parabel übermitteln, z.B. x²,
+   also a2 = 1, a1 = 0, a0 = 0,
+   also die Nachricht ( 1, 0, 0 )
+
+   Funktionswerte berechnen:
+     0² = 0
+     1² = 1
+     2² = 4
+     3² = 4
+     4² = 1
+
+   Funktionswerte übermitteln, Übertragungsfehler
+
+     x | y
+    ---+---
+     0 | 0
+     1 | 1
+     2 | 4
+     3 | 3  <-- falsch; richtig wäre: 4
+     4 | 1
+
+   Gleichungssystem aufstellen und lösen --> widersprüchliche Ergebnisse --> Fehler erkannt
+
+   Gleichungssystem aufstellen und lösen für jeweils 3 der Punkte
+
+     Parabel: a2 x² + a1 x + a0
+
+     0:  a2 · 0² + a1 · 0 + a0 = 0  \
+     1:  a2 · 1² + a1 · 1 + a0 = 1   } a0 = 0, a2 +  a1 = 1,   a2 + a1 = 1
+     2:  a2 · 2² + a1 · 2 + a0 = 4  /         4a2 + 2a1 = 4,  2a2 + a1 = 2
+     3:  a2 · 3² + a1 · 3 + a0 = 3                            ------------
+     4:  a2 · 4² + a1 · 4 + a0 = 1                                 -a2 = -1, a2 = 1, a1 = 0
+                                                                --> Nachricht rekonstruiert
+   Auf diese Weise bekommen wir häufiger die richtige
+   Nachricht rekonstruiert als falsche, ...
+
+   ... es sei denn, die Übertragung enthält mehr als 1 Fehler.
+
+   In der Praxis häufig: Körper mit 8 oder 16 Elementen.
+   Diese sind NICHT { 0, 1, ..., 7 } bzw. { 0, 1, ..., 15 }.
+
+   Zur Illustration: Körper mit 25 Elementen.
+   Dieser ist NICHT { 0, 1, ..., 24 }, sondern
+   { 0, 1, 2, 3, 4 } [ sqrt(2) ]  ("adjungiert Wurzel 2"). Das bedeutet:
+
+     - Wir haben die Zahlen { 0, 1, 2, 3, 4 } modulo 5
+       und zusätzlich w = sqrt(2) mit der Eigenschaft w · w = 2
+       und zusätzlich alle Kombinationen davon, also z.B. 3 + 2w.
+
+     - Dann können wir multiplizieren, z.B.:
+         (3 + 2w) · (1 + w)
+       = 3 · 1 + 2w · 1 + 3w + 2w²
+       = 3 + 5w + 2 · 2
+       = 3 + 0w + 4
+       = 2
+
+     - Jede Zahl: x + y·w (ähnlich komplexen Zahlen: x + y·i)
+
+     - Speicherung als 5-Bit-Zahl (0..31; wir verschwenden die Werte 25 bis 31)
+       oder als 6-Bit-Zahl mit jeweils 3 Bit für "normalen Teil" und "w-Teil" (schneller,
+         aber wir verschwenden mehr als 1 Bit, also mehr als die Hälfte aller Werte)
+
+   Zur Illustration: Körper mit 4 Elementen: siehe
+   https://de.wikipedia.org/wiki/Endlicher_K%C3%B6rper#Der_K%C3%B6rper_mit_4_Elementen
+
+ - In der Praxis in der Praxis: fertige Bibliothek
diff --git a/20220609/polynome-20220609.xcf.gz b/20220609/polynome-20220609.xcf.gz
new file mode 100644
index 0000000000000000000000000000000000000000..49c31ba8022409dee8c0c2c8853575d39b952422
Binary files /dev/null and b/20220609/polynome-20220609.xcf.gz differ