diff --git a/20220620/nit-20220620.txt b/20220620/nit-20220620.txt new file mode 100644 index 0000000000000000000000000000000000000000..f17c1cab426a86359004d7b4dbbf4faecb6b9f45 --- /dev/null +++ b/20220620/nit-20220620.txt @@ -0,0 +1,337 @@ +GNU-Taler, 13.06.2022, 14:37:43 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Quelle: https://nlnet.nl/project/GNUTaler/ + - anonym wie Bargeld + - erschwert Geldwäsche + +Quelle: https://www.heise.de/news/Projekt-GNU-Taler-Das-quelloffene-Bargeld-4892826.html + - zentrale Instanzen: Exchange + - Nutzer anonym + - Händler nachverfolgbar + +Funktionsweise: + + - Bei der Nutzung signiert man die "Überweisung" mit einem privaten Schlüssel + und schickt sie an die Exchange. + - Dieser prüft die Gültigkeit der Überweisung und führt sie aus. + - Peer-to-Peer-Zahlungen: noch nicht möglich, aber geplant + +Behauptung: Zahlung kann anonym erfolgen; Umtausch in klassische Währung ist nachvollziehbar + + - Umtausch in klassische Währung: + geregelt durch die Exchange, typischerweise eine klassische Bank + + - Anonyme Zahlung? + +Verfahren: blinde Signaturen + + - Quelle: https://sceweb.sce.uhcl.edu/yang/teaching/csci5234WebSecurityFall2011/Chaum-blind-signatures.PDF + "fundamentally new kind of cryptography" + + - Jede Münze hat ein Schlüsselpaar. + - Die Exchange kennt diese Schlüsselpaare nicht. + + - Grundidee: Die Exchange unterschreibt etwas, ohne zu wissen, was sie da unterschreibt. + + - Analogie: Unterschrift auf unbekanntem Dokument + mittels Durchschlagpapier in verschlossenem Briefumschlag + + - Anwendung auf eine geheime Wahl auf Entfernung, + bei der sichergestellt wird, daß jede Stimme gezählt wird + --> Trustee (Wahlleiter*in) darf Stimmen zählen, + aber nicht wissen, von wem diese jeweils sind. + + - Stimmzettel in anonymem, inneren Umschlag, den man blind unterschreiben kann + --> Man kann per Blind-Unterschrift bestätigen, + daß der Inhalt des Umschlags für die Wahl zulässig ist. + "In diesem Umschlag befindet sich ein gültiger Stimmzettel." + + - Der anonyme, innere Umschlag wird in einem nicht-anonymen, äußeren Umschlag + an Trustee versendet. + Trustee unterschreibt den inneren Umschlag (und damit blind den Stimmzettel) + und sendet diesen in einem neuen äußeren Umschlag zurück. + --> Der innere Umschlag wurde nicht geöffnet, + dessen Inhalt aber von Trustee unterschrieben. + Damit bestätigt Trustee den Willen von Elector, ohne diesen zu kennen. + + - Elector kann den von Trustee unterschriebenen Stimmzettel nun anonym einreichen. + --> Sinn der Aktion: Nur Elector darf den inneren Umschlag öffnen. + + - Trustee kann die - anonymen und unterschriebenen - Stimmzettel nun veröffentlichen. + +Funktionsweise: + + * Wir haben: + + - ein Schlüsselpaar s (öffentlich), s' (geheim), + + - eine "kommutierende Funktion" c mit Inversem c', die sich "mit der Signatur verträgt", + d.h. c'(s'(c(x))) = s'(x) für ein bestimmtes, aber unbekanntes x. + --> Wir wählen ein x und und lassen es mit s' signieren. + Wir ordnen dem x ein c(x) zu und lassen dieses ebenfalls mit s' signieren. + Dann ordnet c' diesem s'(c(x)) wieder die Signatur s'(x) zuordnen. + + * Vorgehensweise + + - Provider (= Elector = Payer) wählt ein zufälliges x + und übergibt c(x) an Signer (= Trustee = Bank). + + - Signer unterschreibt c(x) --> s'(c(x)). + + - Provider erzeugt daraus s'(x) = c'(c(s'(x))) + --> Damit hat Provider eine Signatur von Signer für x, ohne daß Provider x kennt. + +Quelle: https://en.wikipedia.org/wiki/Blind_signature + + * Vermutung: Spezialfall von homomorpher Verschlüsselung + + - Sei c eine Verschlüsselung und c' eine Entschlüsselung. + + - Wir haben mathematische Botschaften a und b. + + - verschlüsselt: c(a) bzw. c(b) + + - Homomorphe Verschlüsselung bedeutet: c(a+b) = c(a) + c(b) + (und/oder entsprechend für andere Rechenarten) + + * Hier: Verschlüsselung ist homomorph zu RSA + + - Nachricht m, RSA-verschlüsselt r(m), wieder entschlüsselt r'(r(m)) + + - dazu homomorphe Verschlüsselung c: c'(r(c(m))) = r(m) + --> Dies ist nichttrivial! + + - Wie dies für RSA funktioniert: + https://en.wikipedia.org/wiki/Blind_signature#Blind_RSA_signatures + + - Wir ermitteln eine Zufallszahl r + und verschlüsseln sie mit dem öffentlichen Schlüssel: r^e + + - Die Bank signiert das Produkt m' = m · r^e unserer Überweisung m mit r^e. + + - Mit unserem geheimen Schlüssel d und der geheimen Zufallszahl r + können wir daraus eine gültige Signatur für unsere Überweisung m extrahieren. + + * Anwendung auf Zahlungssystem + + - "(3) Bank signs note ... and debits payer's account." + --> Die Bank (= Signer = Trustee) kennt x also doch??? + + Vermutung: + + - Payer nennt Betrag + und erzeugt eine Banknote über diesen Betrag. + + - Die Bank belastet das Konto mit dem gewünschten Betrag + und bestätigt, daß die Banknote für diesen Betrag gültig ist. + + - Payer gibt die Banknote an Payee weiter. + + - Payee gibt die Banknote der eigenen Bank. + Diese prüft die Signatur der anderen Bank, + prüft, ob diese Banknote evtl. bereits anderweitig eingelöst wurde, + und schreibt, sofern alles in Ordnung ist, Payee den Betrag gut. + + --> Damit findet eine Überweisung von Payer an Payee statt, + ohne daß die beteiligten Banken die Transaktion kennen. + + Nachteile: + + - Man benötigt eine immer länger werdende Liste von bereits verbrauchten Banknoten. + + - Peer-to-Peer-Zahlungen sind auf diese Weise (noch) nicht möglich. + + - evtl. Deanonymisierung möglich durch Analyse der Metadaten + --> Problem evtl. lösbar durch Banknoten mit festen Beträgen (wie Geldscheine) + +Themen für heute +~~~~~~~~~~~~~~~~ +Begrenzte Ressourcen sparen durch Software + - Wie muß man programmieren, damit die Software + möglichst wenig Strom verbraucht? + - Wie kann man die in Rechenzentren vorhandene Rechenleistung + möglichst effizient nutzen? + - Beispiel: virtuelle Rechner, Container, Cloud + +--> "Hardware-Nachhaltigkeit", durch Software realisiert + +Smartphones: Bestandsaufnahme + - Wie hoch kann der Anteil an freier Software sein + (auf Standard-Smartphones bzw. auf speziellen, freien Smartphones)? + - Wieviel digitale Souveränität kann man gewinnen? + +Bitte schon mal recherchieren! + +Ressourcen sparen durch Software: Virtualisierung, 20.06.2022, 15:34:52 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + .---------------. + | Anwendungen | + .-------------------. + | virtuelle Rechner | + .-----------------------. + | Hypervisor-OS | + .---------------------------. + | physikalische Hardware | +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Auslastung der vorhandenen Hardware verbessern: + - physikalische Hardware nicht immer voll ausgelastet + - insgesamt am effizientesten: immer voll ausgelastet + (Ansonsten verbraucht der nicht ausgelastete Teil unnötigen Strom.) + - durch Verteilung auf virtuelle Rechner ist volle Auslastung erreichbar + - Dadurch kann man die Anzahl der benötigten Rechner minimieren. + +Beispiel: Proxmox + - einheitliche Verwaltung für Container (z.B. Docker) + und virtuelle Maschinen (z.B. KVM, QEMU) + - Container: Gastsystem verwendet den Kernel des Gastgebersystems mit + (nicht immer möglich) + - Virtuelle Maschine: Gastgebersystem emuliert Hardware für Gastsystem + (langsamer) + +Wie hilft dies bei der Optimierung der Auslastung? + +Beispiel: BigBlueButton + - BigBlueButton hatte früher einen einzelnen zentralen Thread, hatte also + 1 CPU als "Nadelöhr". In dem Fall war es effizienter, mehrere BBB-Instanzen + in virtuellen Umgebungen laufen zu lassen, z.B. in Xen. + --> Virtualisierung erlaubt es, den Server effizienter auszulasten. + - Ein Load-Balancer kann die Last automatisch zwischen diesen verschiedenen + virtuellen Umgebungen verteilen. (Z.B. verteilt Bochum seine BBB-Instanzen + zwischen Bochum und Heiligenhaus.) + - Durch effizientere Programmierung verbraucht BBB inzwischen weniger Ressourcen + als früher. + +LXC und Docker sind zwei verschiedene Oberflächen (Sammlung von Kommandos, +ggf. GUI), um unter einem Linux-Kernel Container zu realisieren. +Proxmox unterstützt Docker nicht nativ, aber man kann Docker innerhalb von +LXC und innerhalb von virtuellen Maschinen nutzen. +Dies ist z.B. dann sinnvoll, wenn Software in Gestalt von Docker-Containern +zur Verfügung steht. +Diese Schachtelung von Containern verbraucht zusätzlichen Speicherplatz, +aber vermutlich keine zusätzliche Rechenleistung. + +Schnittstelle für Backups +ermöglicht, virtuelle "Hardware" in einem Backup zu speichern +Siehe: https://g-n-u.de/images/G-N-U-Karikatur-Virtualisierung.png +--> Unabhängigkeit von konkreter Hardware (einschließlich evtl. nicht mehr + erhältlicher Ersatzteile) + +Cloud, 20.06.2022, 16:28:24 +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Cloud: Landschaft für Virtualisierung, von einem speziellen Anbieter +(extern oder intern) betrieben + - kann helfen, Ressourcen zu sparen (siehe oben) + - mögliches Problem: Verlust der Datenautonomie + --> Dasselbe Problem läßt sich auch für Root-Server nicht ausschließen. + +Cloud-Nutzung mit Smartphones? + - Je nach Benutzung des Smartphones liegen viele Daten nicht auf dem + Smartphone selbst, sondern in der Cloud. Entsprechendes gilt für + Office 365 auf "normalen" Rechnern. + - Bei Installation von Apps aus dem Google-App-Store erfährt Google, + wer sich was installiert hat und evtl noch mehr. + - Push-Nachrichten: Dienstebetreiber registrieren sich bei Google bzw. Apple. + Je nach App erfährt Google/Apple nur, daß eine Nachricht vorliegt + oder auch Metadaten und evtl. den Inhalt. + --> Man hängt trotzdem immer an der "Nabelschnur" von Google/Apple. + - Unified Push: https://unifiedpush.org/ + dezentraler Dienst für den Empfang von Push-Nachrichten, + nur von speziellen Apps unterstützt + +Push-Nachrichten: Dauerhafte Verbindung mit dem Push-Server + - Wenn jeder Diensteanbieter einen eigenen Push-Server betreibt, + muß jede App eine eigene Verbindung aufbauen. +--> Zentraler Push-Server ist sinnvoll. + +Smartphones: Bestandsaufnahme, 20.06.2022, 16:47:07 +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + * Wie hoch kann der Anteil an freier Software sein + (auf Standard-Smartphones bzw. auf speziellen, freien Smartphones)? + + - Betriebssystem: Android + (Linux-Distribution für Smartphones) + - Android-Entwickler versuchen, die Differenz zwischen Android und dem + offiziellen Linux-Kernel, möglichst gering zu halten. + - Jede App bekommt eine eigene User-ID. + - Zertifiziertes installiertes Android: + - keine root-Shell + - grafische Oberfläche ("Launcher"?), keine Text-Shell + - bestimmte, proprietäre Google-Apps vorinstalliert, z.B. PlayStore + - Text-Shell nachinstallieren: kein privilegierter Prozeß, + kann nur auf öffentliche Daten zugreifen + - "secure boot" ist aktiv --> Man kann keinen eigenen Kernel starten, + um evtl. doch auf private App-Daten zuzugreifen. + Man kann dies deaktivieren, dann werden jedoch alle Benutzerdaten + gelöscht. + - Bootloader: 3 Modi + - fest installierter Bootloader, kann Android neu installieren + - Recovery Mode: kann Android reparieren oder neu installieren, + nicht fest installiert, sondern auf Flash, daher austauschbar, + kann dann auch root-Shell enthalten + - Standard-Modus: Android startet + - Ge"root"etes Android: + - root-Shell vorhanden + - Apps können auch root-Rechte haben. + + - AOSP - Android Open Source Project + - liegt grundsätzlich offen: https://source.android.com/ + - Chipsatz-Hersteller ergänzen hier ihre Treiber. + Diese sind meistens proprietär, zumindest der User-Space-Teil. + (Der Kernel-Space-Teil müßte eigentlich immer offenliegen, + tut dies aber nicht immer.) + --> Ein handelsübliches Smartphone enthält eigentlich immer + proprietäre Treiber. + Je nach Gerät gibt es bestimmte Hardware-Treiber + nur als unfreie Software. + - Zusätzlich insallieren die Smartphone-Hersteller ihre eigenen + proprietären Apps vor. + + - Betriebssystem: LineageOS + (Nachfolger von CyanogenMod, Projekt von Freiwilligen) + - Anpassung von AOSP an aktuelle Smartphone-Modelle + - verwendet proprietäre Treiber + - weitgehend kompatibel zu Android + - keine Apps vorinstalliert + - Updates unabhängig vom Hersteller + + - Freie Smartpones: Librem 5, Pinephone + - Übersicht: https://en.wikipedia.org/wiki/Comparison_of_open-source_mobile_phones + - Die Haupt-CPU führt keinen proprietären Code aus. + - Pinephone: proprietäre Firmware für WiFi/Bluetooth + liegt in /lib/firmware, wird von Modem ausgeführt + - Librem 5: proprietäre Firmware für DRAM-Initialisierung + liegt in separatem Speicher, wird von separatem µC ausgeführt + - Auf dem Modem läuft proprietäre Software. + Dies ist rechtlich auch nicht anders möglich. + - Auf beiden Systemen läuft Standard-Linux, + normalerweise mit einer Oberfläche, die für den Gebrauch + als Smartphone angepaßt ist (z.B. Phosh). + - Es existiert ein Android-basiertes System für das Pinephone, + direkt auf AOSP basierend, ohne LineageOS: + https://github.com/GloDroid/glodroid_manifest + - Es existiert ein Android-Emulator für Linux mit Wayland: waydroid + Damit könnte man Android-Apps auf freien Smartphones unter Linux ausführen. + (Laufendes Projekt: Corona-Warn-App unter Linux) + - Die Treiber enthalten weiterhin proprietäre BLOBs: + Laut https://www.pine64.org/2020/01/24/setting-the-record-straight-pinephone-misconceptions/ + folgendes: WiFi+Bluetooth firmware, optionale Autofokus-Firmware für + die rückseitige Kamera und das Betriebssystem auf dem Quectel EG25-G + LTE Modem ist auch unfrei. Wifi benutzt SDIO, Bluetooth UART zur + Kommunikation. + Für das Modem gibt es inzwischen eine Firmware, die in großen Teilen frei ist: + https://gnulinux.ch/hacker-entwickeln-open-source-firmware-fuer-das-pinephone-modem + (der Teil, der auf dessen CPU läuft, die Software für den DSP, der + direkt mit dem Mobilfunknetz spricht, ist aber unfrei). Laut gerade + genanntem Artikel ist es aber rechtlich nicht zulässig, diese Firmware + vorzuinstallieren, im Zweifel geschieht also das Einstecken einer + SIM-Karte danach auf eigene Gefahr. + - Kein DMA-artiger Zugriff der proprietären Module auf den Hauptspeicher möglich. + (Bei Android: Modem spricht direkt mit Lautsprecher und Mikrofon.) + --> enormer Gewinn an Kontrolle über die Hardware + + * Wieviel digitale Souveränität kann man gewinnen? + - Auf Push-Server achten! + - Auf proprietäre Treiber achten! + - Auf vorinstallierte Apps achten! + - Freie Smartphones nutzen.