diff --git a/20240502/ad-20240502.txt b/20240502/ad-20240502.txt index 5aa8b807983eaca0db0aa2f0cdb3711e7aa531e5..3c8a1b0339b647e575ffcb8355800cf86899d4d6 100644 --- a/20240502/ad-20240502.txt +++ b/20240502/ad-20240502.txt @@ -14,8 +14,271 @@ 02.05.2024 ~~~~~~~~~~ - - yesVNC (Fortsetzung) - - Skripte zur allgemeinen Nutzung von Online-Plattformen - (s, mic, Weiterentwicklung: VNC Vollbild) - - weitere Anwendungen diskreter Mathematik: +:) Skripte zur allgemeinen Nutzung von Online-Plattformen (s, mic) +:) Weiterentwicklung dieser Skripte: BBB Mute/Unmute + - Weiterentwicklung dieser Skripte: VNC Vollbild) + --> DISPLAY=:0 xvkbd -no-jump-pointer -window 29360133 -text "\[F8]\[Down]\[Down] " + o weitere Anwendungen diskreter Mathematik: elliptische Kurven, AES, Fehlererkennung und -korrektur + - yesVNC (Fortsetzung) + +Sicherheitsanforderungen des BSI zu Individual-Software, 02.05.2024, 13:32:29 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + - Vor Beginn der Entwicklung: Sicherheitskonzept + - Installationsanleitung + - Installation durch die Campus-IT + + +Hallo zusammen, + +ich habe mir vorhin eine kleine Individual-Software programmiert, +mit der ich per Tastatur zuverlässig das Mikrofon ein- und +ausschalten kann. Im Anhang zwei Shell-Skripte und die davon +benötigten Audio- und Grafikdateien. + +Sicherheitskonzept: Ich nutze ganz normal auf meinem +Notebook dbus-send, amixer, aplay und xteddy. Solange diese +Nicht-Individual-Programme keine Sicherheitslücken enthalten, +wird daher auch meine Individual-Software sicher sein. + +Lizenzen: Das Mikrofon-Icon von GNOME steht unter GNU GPL v2, +alles von mir selbst unter CC0 ("public domain"). + +Installationsanleitung: Alle Dateien irgendwo ablegen, nötigenfalls +in den Shell-Skripten die Pfade anpassen. Bei mir hat es sich +bewährt, die Programme mittels xbindkeys aufzurufen, z.B. durch +die folgende Konfiguration in ~/.xbindkeysrc: + + "$HOME/usr/bin/s" + Print + + "$HOME/usr/bin/s i" + Control+Print + + "$HOME/usr/bin/mic toggle" + Pause + +Bedienungsanleitung: "s --help" bzw. "mic --help" eingeben. + +Das Programm "mic" schaltet das Mikrofon per amixer an und aus und +stellt ggf. auch mumble per DBUS auf "stumm", damit Mumble-Nutzende +von außen sehen, daß mein Mikrofon an- bzw. ausgeschaltet ist. +Darüberhinaus zeigt es mittels xteddy auf meinem exportierten +Bildschirm ein Icon, das Personen im Raum anzeigt, ob das Mikrofon +aktuell an- oder ausgeschaltet ist. + +Ich habe leider keine Möglichkeit gefunden, BBB per Skript +abzufragen, ob ich gerade stumm geschaltet bin oder nicht. +Daher halte ich es aktuell für zu riskant, das BBB-Mikro per +Skript umzuschalten, selbst wenn wir einen zuverlässigen Weg +finden, dies zu tun (z.B. mittels xdotool). Bzgl. BBB beschränke +ich mich also aktuell darauf, das Mikrofon per amixer an- bzw. +auszuschalten und den aktuellen Status über meinen exportierten +Bildschirm mitzuteilen. + +Statstik: Um die Software zu schreiben und zu debuggen, habe ich +heute genau 90 Minuten investiert. Um die Lizenzen zu prüfen und +die Dokumentation in dieser E-Mail zu schreiben, weitere 41 Minuten, +also weniger als die Hälfte der Zeit für die Software-Entwicklung. +Immerhin. :-] + +Schöne Grüße + + Peter +-- +Prof. Dr. Peter Gerwinski - Hardwarenahe IT-Systeme +embedded systems - microcontrollers - device drivers +Hochschule Bochum - Bochum University of Applied Sciences +Campus Velbert/Heiligenhaus - https://www.hs-bochum.de/cvh/ + +Elliptische Kurven, 02.05.2024, 15:51:17 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Elliptische Kurve = Lösung einer Gleichung 3. Grades mit 2 Variablen +--> Funktionsgraph = glatte Kurve + +Körper: Anstelle der reellen Zahlen nehmen wir einen endlichen Körper. +--> Funktionsgraph = Schneegestöber + +Auf diesem Funktionsgraphen identifizieren wir eine Gruppe (G,·), +auf der die Multiplikation einfach ist, aber die Division schwierig. +--> Grundlage für ein asymmetrisches Kryptosystem + +--> :-) + +Symmetrische und Asymmetrische Verschlüsselung, 02.05.2024, 15:54:13 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Symmetrische Verschlüsselung: + + - Ver- und Entschlüsseln mit demselben (geheimen!) Schlüssel + - sicher ab einer Schlüssellänge von ~128 Bit + - schnell + (Z.B. 128-Bit-Operationen auf 64-Bit-Prozessoren: + https://de.wikipedia.org/wiki/Advanced_Vector_Extensions) + + - Problem: Schlüsselaustausch + - Lösung: Schlüsselaustausch vorab ("pre-shared key" - PSK) + - Lösung: Diffie-Hellman + - Lösung: Asymmetrische Verschlüsselung + +Asymmetrische Verschlüsselung: + + - Verschlüsseln mit öffentlichem Schlüssel, + Entschlüsseln mit geheimem Schlüssel + - sicher ab einer Schlüssellänge von ~2048 Bit + - langsam + + - Anwendung: einen symmetrischen (geheimen) Schlüssel asymmetrisch verschlüsseln + --> hybride Verschlüsselung + + - Problem: Schlüsselaustausch + - Lösung: Schlüssel auf mehreren Wegen austauschen. + Diese brauchen nicht abhörsicher zu sein, sondern nur manipulationssicher. + +AES und endliche Körper, 02.05.2024, 16:04:30 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +AES arbeitet in einem Körper mit 256 Elementen. + +Zur Veranschaulichung: Körper mit 4 Elementen + + - Elemente: 0, 1, x, x+1 + + - Addition: modulo 2, ähnlich der Addition von komplexen Zahlen als "Vektor" + + - Multiplikation: x · x = x+1, x+1 · x+1 = x + Veranschaulichung: (x + 1) · (x + 1) = x² + 2x + 1 = x+1 + 0 + 1 = x --> :-) + + - Ist dies wirklich ein Körper? --> Inverse Elemente für Multiplikation prüfen + z.B.: Das multiplikative Inverse von x+1 ist x, da x+1 · x = 1. + +Zur Veranschaulichung: Körper mit 25 Elementen + + - Elemente: { 0, 1, 2, 3, 4 } mit Adjunktion von \sqrt{2} + --> z.B.: 3 · \sqrt{2} + Ähnlich gehen die komplexen Zahlen aus den reellen Zahlen hervor: + Adjunktion von i mit i² = -1 + +Zur Veranschaulichung: Körper mit 49 Elementen + + - Elemente: { 0, 1, 2, 3, 4, 5, 6 } mit Adjunktion von \sqrt{6} = \sqrt{-1} = i + +Fehlererkennung, 02.05.2024, 16:35:51 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Fehlererkennung durch Parität: + - binäre Nachricht: 10110100 + - Parität: Wir zählen die Einsen. + - zusätzliches Bit: War es eine gerade oder ungerade Anzahl von Einsen? + - ungerade Parität: Zusammen mit dem Zusatzbit muß es eine ungerade Anzahl sein. + Hier: Zusatzbit 1, also senden wir insgesamt: 101101001 + - gerade Parität: Zusammen mit dem Zusatzbit muß es eine gerade Anzahl sein. + Hier: Zusatzbit 0, also senden wir insgesamt: 101101000 +--> kann 1 umgedrehtes Bit erkennen, versagt bei 2 umgedrehten Bits + - Mathematische Operation: modulo 2, Untersuchung des Restes + +Fehlererkennung durch CRC (cyclic redundancy check): + - Mathematische Operation: modulo ein Polynom (in einem Ring), Untersuchung des Restes +--> http://www.peter.gerwinski.de/download/net-2013ss.tar.gz, Seite 31 + - Polynomdivision über dem Körper ( { 0, 1 }, +, · ) + - Wir versenden die Nachricht mit angehängten Bits und interpretieren sie + als Polynom über diesem Körper. Wenn die Divison durch ein vorher vereinbartes + Polynom funktioniert, war die Datenübertragung erfolgreich. +--> Die Wahrscheinlichkeit, daß die Division zufällig funktioniert, + ist für ein 4-Bit-Polynom 1 : 2^4. --> CRC4 + In der Praxis: CRC32, CRC64, ... + +Ausfallsicherheit: RAID 5, 02.05.2024, 17:16:34 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Netzwerk-Skript, S. 27 + +Mindestens 3 Platten: A B C + + A speichert Daten + B speichert weitere Daten + C speichert A-Daten xor B-Daten ("Paritäts-Platte") + +--> Wenn eine Platte ausfällt, kann ich sie durch ein xor der beiden + verbliebenen Platten rekonstruieren. + +RAID 5: Die Platten wechseln sich für verschiedene Datenblöcke in ihren Rollen ab: +Mal ist C die Paritäts-Platte, mal A, mal B. +--> Gleichmäßige Auslastung aller Platten + Päritätsplatte wird immer doppelt belastet. + --> höherer Verschleiß, "Flaschenhals" für die Performanz + +Bei 4 Platten: A B C D + + A speichert Daten + B speichert weitere Daten + C speichert weitere Daten + D speichert A-Daten xor B-Daten xor C-Daten ("Paritäts-Platte") + +Fehlerkorrektur: Reed-Solomon-Code, 02.05.2024, 17:23:59 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Wir übertragen die Informationen als die Koeffizienten eines Polynoms, +indem wir Stützpunkte übertragen, z.B. 3 Punkte für eine Parabel. +Wenn wir mindestens 2 Punkte zusätzlich übertragen, kann das Polonom +auch dann rekonstruiert werden, wenn ein Punkt falsch übertragen wurde. + +--> reed-solomon-*.png + +"Überschriften" in vi(m), 02.05.2024, 17:48:44 + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Text markieren, dann durch das untenstehende Shell-Skript "hh" pipen: + +#!/bin/bash + +IFS='' read TXT + +if echo "$TXT" | file - | grep -q UTF-8; then + RTXT="$TXT" + unrecode="cat" +else + RTXT=$(echo "$TXT" | recode latin1..utf8) + unrecode="recode utf8..latin1" +fi + +if [ -z "$RTXT" ]; then + SUFFIX="" +elif echo "$RTXT" | grep -q "[?.!]$"; then + SUFFIX=" " +else + SUFFIX=", " +fi + +PREFIX=$(echo "$RTXT" | sed -e 's/^\([^0-9A-Za-zÄÖÜäöüß]*\).*/\1/') +DATE=$($HOME/usr/bin/hd) +FULLTXT="$(echo "$RTXT" | sed -e 's/^[^0-9A-Za-zÄÖÜäöüß]*//')$SUFFIX$DATE" +UNDERLINE=$(echo "$FULLTXT" | sed -e 's/./~/g') +INDENT=$(echo "$PREFIX" | sed -e 's/./ /g') +#echo "|$TXT|" +#echo "|$RTXT|" +#echo "|$PREFIX|" +#echo "|$FULLTXT|" +echo -e "$PREFIX$FULLTXT\n$INDENT$UNDERLINE" | $unrecode + +BBB-Betriebsmodi für Lehrveranstaltungen, 02.05.2024, 16:55:47 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Wie PULT: + Kamerabild unten rechts in der Bildschirmpräsentation + +--> Die Anordnung, bei der die Bildschirmpräsentation nicht verkleinert wird + und trotzdem die Kamera zu sehen ist, ist ein Vorteil. + + * BBB mit geteilter Präsentation: + Kamerabild oben, darunter jeweils ein geteiltes Fenster (z.B. Folien) + + * BBB mit geteiltem Bildschirm: + Kamerabild z.B. unter dem Chat, daneben der geteilte Bildschirm + +--> Die Möglichkeit, das Kamerabild separat anordnen und wegschalten zu können, + ist ein Vorteil. + + * BBB mit geteiltem Bildschirm und "Bild im Bild": + Es ist möglich, den geteilten Bildschirm im Vollbildmodus zu betrachten + und das Kamerabild an eine beliebige Stelle zu schieben. + +--> Die PULT-Anordnung als Startbildschirm wäre eine perfekte Lösung. + --> Funktioniert nicht, weil "Bild im Bild" vom Browser aktiviert wird + und an BBB komplett vorbeigeht. + +==> Das Vorhaben, die PULT-Anordnung als Startbildschirm in BBB zu realisieren, + ist sinnvoll. diff --git a/20240502/bbb-test-01.sh b/20240502/bbb-test-01.sh new file mode 100755 index 0000000000000000000000000000000000000000..88e6066d73112c2dfaf292a63548d5501ce22fe2 --- /dev/null +++ b/20240502/bbb-test-01.sh @@ -0,0 +1,10 @@ +export DISPLAY=:0.0 + +winid=$(xwininfo -root -tree | grep BigBlueButton | awk '{print $1}') + +if [ -n "$winid" ]; then + focus=$(xdotool getwindowfocus) + xvkbd -no-jump-pointer -window $winid -text 'x' + sleep 0.1 + xdotool windowfocus $focus +fi diff --git a/20240502/bbb-test-02.sh b/20240502/bbb-test-02.sh new file mode 100755 index 0000000000000000000000000000000000000000..81a331d3111ea18347edf921b1118c82b31df79a --- /dev/null +++ b/20240502/bbb-test-02.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +export DISPLAY=:0.0 + +debug=true + +winid=$(xdotool search --name BigBlueButton) + +$debug && echo $winid + +if [ -n "$winid" ]; then + focus=$(xdotool getwindowfocus) + xdotool windowactivate --window $winid + xdotool key --window $winid "x" + sleep 0.1 + xdotool windowfocus $focus +fi diff --git a/20240502/bbb-test-03.sh b/20240502/bbb-test-03.sh new file mode 100755 index 0000000000000000000000000000000000000000..5a0309edb2ad46b94ae0cb8c6d6d532d0b300ad4 --- /dev/null +++ b/20240502/bbb-test-03.sh @@ -0,0 +1,10 @@ +export DISPLAY=:0.0 + +winid=$(xdotool search --name BigBlueButton) + +if [ -n "$winid" ]; then + focus=$(xdotool getwindowfocus) + xvkbd -no-jump-pointer -window $winid -text '\Am' + sleep 0.1 + xdotool windowfocus $focus +fi diff --git a/20240502/reed-solomon-01-parabel.png b/20240502/reed-solomon-01-parabel.png new file mode 100644 index 0000000000000000000000000000000000000000..70b832ef2802d1fe1f071805f77829a68d42f102 Binary files /dev/null and b/20240502/reed-solomon-01-parabel.png differ diff --git a/20240502/reed-solomon-02-4-punkte.png b/20240502/reed-solomon-02-4-punkte.png new file mode 100644 index 0000000000000000000000000000000000000000..e12e1417f033d4c2cae3abff748ed3265f54a2cb Binary files /dev/null and b/20240502/reed-solomon-02-4-punkte.png differ diff --git a/20240502/reed-solomon-03-5-punkte.png b/20240502/reed-solomon-03-5-punkte.png new file mode 100644 index 0000000000000000000000000000000000000000..a1f5d4e8ef04b61172c81918e851188a7809077d Binary files /dev/null and b/20240502/reed-solomon-03-5-punkte.png differ diff --git a/20240502/reed-solomon-04-fehlerkorrektur.png b/20240502/reed-solomon-04-fehlerkorrektur.png new file mode 100644 index 0000000000000000000000000000000000000000..80b567181dada456d1f8973a685b8535500fb296 Binary files /dev/null and b/20240502/reed-solomon-04-fehlerkorrektur.png differ diff --git a/20240502/reed-solomon.xcf.gz b/20240502/reed-solomon.xcf.gz new file mode 100644 index 0000000000000000000000000000000000000000..9933b5ba18ccd87b4bf41742dd3aab4cd82d79a4 Binary files /dev/null and b/20240502/reed-solomon.xcf.gz differ