 Moin, ja, der Harold hat leider gerade technische Probleme, dem ist sein Rechner abgeschmiert, deshalb muss ich mich ein wenig selbst heralden. Mein Name ist Vollkorn und ich bin seit einiger Zeit beim Chaos Computer Club dabei und mache unter anderem die Mitgliederverwaltung. Und in dieser Funktion habe ich viel mit verschüsselten E-Mail zu tun, weil der Kongress, Entschuldigung der Chaos Computer Club möchte natürlich die personenbezogenen Daten seiner Mitglieder möglichst verschlüsselt übers Netz senden. Dafür wird OpenPGP benutzt und die Mitgliederverwaltung ist im Peisen. Darum gebe ich heute euch ein Vortrag darüber, was ich gelernt habe, darüber, wie man OpenPGP verschüsselt E-Mails mit Peisen vernünftig machen kann oder auch nicht. So, den Kontext habe ich an dieser Stelle jetzt schon ein wenig vorausgenommen. Wenn ihr mehr Interesse habt darüber zu erfahren, wie die Mitgliederverwaltung des Chaos Computer Clubs läuft, was für Software wir da benutzen, was die Probleme sind und so weiter und so fort, dann schaut einfach mal auf media.cc.de rein und sucht dort nach Vollkorn. Da gibt es irgendwie vier Talks und drei davon sind darüber, wie die Mitgliederverwaltung funktioniert. So, fangen wir mal ganz vorne an. Wir haben eine Mitgliederverwaltung. Die ist im Peisen geschrieben. Und jetzt möchte ich ganz naiv. Ich bin einfach schön, PGP, Bindings oder irgendwas benutzen, um E-Mails zu verschlüsseln. Also fange ich an, ganz naiv. Ich such mal, was gibt es denn für Pakete in Pipeye, die GPG sprechen können? Und dann gibt es ein paar Ergebnisse und dann guckt man sich die an und schaut, das ist mein, gibt natürlich immer gute, weniger gute, welche die Outdater sind und so. Aber irgendwas ist ja üblicherweise, wo die Leute gerade alle dabei sind und es benutzen. Und da fing dann schon meine Stimmung an, so ein bisschen schlechter zu werden. Also ich nehme euch jetzt mal mit auf eine kleine Tour der Dinge, die es da alle gibt. Angefangen mit Peisen-GnupiG. Von Vinay Sajib, finde ich, dass ich die Ausspreche geschrieben habe, soweit ich vorausfinden konnte, die erste Peisen-Bindings, die es gab, sehr populär weit verbreitet, viel benutzt und alles. Aber das ist nur ein simpler Rapper über die GPG executable. Was dort intern passiert, ist tatsächlich, dass einfach nur GPG aufgerufen wird, mit Sub-Process-P-Open, GPG-Excel-offen-Windows oder sowas, Command-Line-Parameter dahinter und aufrufen. Und hier habe ich jetzt extra noch das Shell gleich true hingeschrieben, denn das ist eines der großen Probleme dieser Technik. Dieses Paket hatte super viele Sicherheitsprobleme mit Shell-Injection. Also ich weiß nicht, die exakten Angriffe, aber so grob. Man schreibt ein bisschen Shell-Befehle mit in den Code, den man gerne, nicht in den Code, in die Daten, die man gerne entschlüsselt hätte und zack wird es ausgeführt mit den Rechten des GPG-Users hier. Na ja, aber wie sieht überhaupt dieses Interface aus? GPG executable aufrufen, das ist doch furchtbar instabil, oder? Ja, ist es auch. Es gibt da einige Sachen, die es besser machen. Zum Beispiel GPG gibt mit dem Befehl dash dash with dash Collins, der hier oben in der ersten Zeile in der Mitte angegeben ist, ein maschinenlisbares Format aus. Wie ihr seht, das sieht alles sehr confus aus und diese ganzen Doppelpunkte sind eben die Trendzeichen für die verschiedenen Felder, die man dann maschinenlisbar auslesen kann. Das große Problem daran ist, ist natürlich wieder ein eigenes Format. Man muss das lernen, man hat eine Beschreibung, muss halt ein Pasa dafür schreiben. Ist er so mäßig geil? Kleiner Fun Fact, natürlich haben sie daran gedacht, dass wenn man jetzt einen Doppelpunkt in seinen Username oder seinen Kommentar oder sowas reinschreibt, dass der dann ordentlich escaped wird. Wird das zum Backslash x3a, wenn man ein Backslash x3a reinschreibt, haben sie auch dann gedacht, wird alles sauber encoded und decoded wieder, aber muss man darauf aufpassen, dass man das bei der Umsetzung natürlich auch wieder ordentlich richtig macht. Na ja, was aber, wenn sich das Format ändert? Zum Beispiel hat sich in der GPG Version 2.0.10 das Format insofern geändert, dass die Timestamps umgestellt wurden. Was passiert dann? Der Vrapper fliegt auf die Nase, wenn er das nicht expeziell irgendwie vorher abprüft auf welcher Version er da gerade unterwegs ist und wenn er dann halt irgendwie einen älteren Vrapper hast und eine neue GPG Variable, dann tut er das wohl nicht und boom, komische Sachen passieren. Ja, dieses Modul Python News GPG war das erste, das die Mitgliederverwaltung genutzt hat. Das hat zu interessanten Sachen geführt. Zum Beispiel, wenn ein Key abgelaufen ist, dann gab es einen leeren Rückgabewert, aber keine Exception oder Fehlermeldung oder sonst was auf Programmierseite. Und das hat einfach dazu geführt, dass eine leere E-Mail versendet wurde. Diejenigen unter euch, die Mitglieder im Club sind und vor 2017 schon dabei waren, haben das vielleicht mal erlebt, wenn sie ein Key bei uns hatten, der dann abgelaufen ist. Dann ist das nicht genau passiert. Geben eine leere Mail an die Mitglieder und die Mitglieder schrieben dann so zurück, was wollt ihr denn? Habt ihr da vielleicht den Inhalt vergessen? Und ich hab meinen Standard-Antwort-Satz, das schon früher schon gehabt, mein Textbaustein. Echt nerviges Problem. Wäre halt viel geiler, wenn man irgendwie eine Exception bekommt, hey, der Key ist abgelaufen, den du hier gerade benutzen möchtest. Kann man die behandeln, kann damit arbeiten, wie auch immer. Na ja, ganz perfiders Detail an dieser Stelle. Der String ist übrigens nicht exakt leer. Der hat irgendwelches White Space drin. Also es hat nicht gereicht, einfach zu prüfen, String leer, nein. Na ja, hätte mal irgendwie String leer und Strip den White Space oder sowas machen müssen. Hätte mal irgendwie alles fixen können. Man hätte auch irgendwie einen Fehler antipizieren können, antizipieren können und sagen können, okay, ist der Schlüssel noch gültig, dann verschickt sonst nicht. Oder wie auch immer. Ich finde es trotzdem sehr unschön und wackelig, weil ich möchte, dass wenn in der Verschüßung etwas schief fällt, läuft ja, dass ich eine vernünftige Exception habe, dass ich das behandeln kann. Also gucken wir weiter. KnoopyG. Das ist eine Aktualisierung von, na ja, Aktualisierung ist falsch. Ein Neugeschreibung, ein neugeschriebenes Modul von Isis Lovecraft. Und eine der Auslöser war, dass eben diese ganzen Sub-Process-Aufrufe so furchtbar Sicherheitslücken behaftet waren und deshalb wird sie das neu gemacht. Besser, hat jetzt weniger Probleme mit solchen Sicherheitslücken, ist nicht kompatibel zu Python, was übrigens auch zu viel Problem geführt hat, weil die Leute dachten, es gibt eine neue Version und ich nehme die mal und dann fliegt mir alles um die Ohren, weil die API ist anders. Ja, aber es hat immer noch das Problem, es ist halt nur ein Rapper, der die GPG executable aufruft mit dem instabilen Interface und alles. Das finde ich nicht so cool. Gucken wir mal weiter. Was gibt es denn noch für Möglichkeiten? Schauen wir mal rein und zwar jetzt außerhalb von PyPy. Was gibt es da noch so? Sequoia. Sequoia ist eine eigenständige OpenPGP-Standard-Implementierung. Das heißt, das ist nicht irgendwie ein Rapper oder sonst was, sondern es ist ein Ersatz für KnuppiG, eine Alternative. Und Sequoia wird in Rust geschrieben. Das ist eigentlich ganz cool, weil Rust ist eine Programmiersprache, die einem viele klassische Programmierprobleme, Fehlerklassen von vorne verhindert, wie zum Beispiel Buffer Overflows oder ähnliches. Und gerade für eine sicherheitsrelevante Anwendung finde ich das eine ziemlich coole Sache. Also mal hier reingeschaut. Das Ding ist auch recht performant. Es gibt eine Attacke auf KnuppiG Keys, sogenannte Signature Flooding. Das wurde im Juni letzten Jahres mal groß irgendwie ausgespielt. Da wurden die Keys von zwei KnuppiG-Entwicklern mit insgesamt, nee, mit jeweils ungefähr 150.000 Signaturen zugespammed, die dann auf die Keyserver hochgeladen wurden. Das führte dazu, dass erst die Keyserver in die Knie gegangen sind, Leute, die diese Keys runtergeladen haben, die ganzen Signaturen konnten mit ihrem KnuppiG nicht mehr arbeiten, weil das dann versucht hat, all die Signaturen beim importieren zu verifizieren und so weiter und so vor. Und dann ist KnuppiG einfach zu einem Crawl, zu einem ganz langsam dahin kriechen, verkommen einen so langen Prozessieren dieser ganzen Keys, dass man einfach nur noch verzweifelt abgebrochen hat, weil das wird einfach nie fertig. Ja, Sequoia hat für diese Beispiel Keys fünf Sekunden gebraucht, die jeweils zu importieren und war gar nicht mal darauf optimiert, diese Angriffsklasse irgendwie abzufangen oder so. Das klingt ja eigentlich ganz cool, weil ganz ehrlich, ratet mal, welche Keys die sind, die bei uns in der Mitgliederverwaltung an auftauchen, da haben wir alles mögliche ans Gorillen Keys. Na ja, also wäre cool zu nutzen. Wie schaut es denn aus? Gehen wir auf die Webseite. So, Python Sequoia, die Python Bindingsstatus. Early Prototype. Ja, habe ich mir angeschaut. Sieht alles ganz hübsch aus, aber echt, da fehlt noch einiges in der API, um das alles nutzen zu können, was wir für die Mitgliederverwaltung brauchen. Also müssen wir ein bisschen weiter gucken. Müssen wir aber gar nicht so weit gucken. Kommen wir einmal bei den Geldgebern für Sequoia Nachschauen. Sequoia ist für Open Source Projekt und so weiter, aber die Entwickler bekommen ihr Geld von der Pretty Easy Privacy Foundation und die haben ja auch ein Produkt draußen, Pretty Easy Privacy oder auch PEP. PEP benutzt GPGME, darauf gehe ich später noch ein und hat selber Python Bindings, Bindings, die es anbietet. Allerdings, auch wenn es Open Source ist, ist die Installation echt nicht einfach. Also um es mal sozusagen, ich musste, man muss mehrere Abhängigkeiten vorkompilieren. Ich habe keine fertigen Pakete gefunden. Nach dem Motto hier ist irgendwie eine Repository, wo das jemand mal für Debian oder sowas fertig gemacht hat. Nee, ich musste erst mal überhaupt die Anleitung finden, wie das geht. Und da geht man auf die Webseite und stellt fest, ja, der Link für Integrate PEP in deinen Python oder sowas, 404, der ist kaputt. Na ja, ich habe die Repositories von den gefunden. Da gibt es dann irgendwie auch ein Readme. Das Readme vergisst übrigens zu erwähnen welcher Branch denn jetzt der aktuelle ist. Darum habe ich erst mal den Alten gebaut, bis ich damit einen Entwickler gesprochen habe, der mir gesagt hat, da muss er den neuen nehmen. Die Sonnenbranche hat zyklische Abhängigkeiten, wo man dann noch irgendwie die magische Befehlsteile wissen muss und hey, es ist echt nicht einfach das Ding aufzusetzen. Glücklicherweise kenne ich einen Entwickler da und habe mit dem einfach mal kurz per Java das gefixt durchgesprochen und hatten wir geholfen. So, dann hatte ich also mein fertige Python Bindings für Pretty Easy Privacy und das sieht ehrlich gesagt hübsch aus. Also die API gefällt mir, muss ich sagen. Man hat irgendwie Identities, die man irgendwie anlegen kann, die dann Key haben, dann kann man an die Identity in der Nachricht verschlüsseln. Und wenn man irgendwie einen Fehler macht an irgendeiner Stelle, dann fliegt ein C-Assertion und das ganze Python crashed. Und das will ich nicht. Ganz ehrlich, ich möchte bitte, dass da eine Exception kommt, wenn irgendwo was falsches ist. Und wenn mir mein Python abschmiert, kann ich nicht da vernünftig darauf reagieren und sagen, hier muss ich mal den Mitgit Bescheid geben, dass der Key abgelaufen ist oder hier muss ich dem User sagen, der jetzt gerade in der Mitgit Verwaltung sitzt, du musst das anders machen oder sowas. Nee, da muss ich das neu starten und irgendwie den Debagger anwerfen oder was weiß ich, das ist einfach keine Option für ich möchte 2000 Mails heute Abend rausschicken. Es ist 22 Uhr, ich möchte nach Hause. Na ja, aber gut, kann ja mal das Projekt irgendwie nochmal anschauen, verbessern, supporten mit beitragen. Aber das Mime, das rausfällt, sieht übrigens so aus, wenn man es in Thunderbird öffnet. Es ist eine leere E-Mail. Frag mich bitte nicht, warum dieses PGP Mime, das ja eigentlich ganz hübsch aussieht, so beim Thunderbird ankommt, wahrscheinlich ist da irgendwas schief. Aber das war dann so der Punkt, wo ich gesagt habe, OK, Pep sieht es doch irgendwie ganz cool aus, hat aber einfach zu viele Probleme, um es derzeit so zu benutzen. Also weiter geschaut, GPGME, das hatte ich gerade immer erwähnt, Pep beruht, basiert auf GPGME und GPGME sind die offiziellen Python-Bindings von KnobgyG. Also, lass uns doch mal damit arbeiten. Wie mache ich das üblicherweise? Ich lege ein Projekt an, ich habe eine Requirements.txt, da stehen meine Pakete drin und damit fängt es dann schon an. Welches GPGME nimmt man denn? Man kann sich das von Pipei installieren. Oder fasst ihr das Betriebssystem, also Linux, das GPG mitliefert, liefert auch die Python-Bindings mit als eigenes Python-GPG oder sowas Paket? Warum machen Sie das? Das liegt mich daran, dass diese Python-Bindings von der Version her passen müssen zu der GNU-PG-Installation, die man hat. Sonst gibt es merkwürdige Fehler. Ja, das Problem ist, man will also nicht das Python-GPG aus dem Pipei nutzen, sondern aus dem Betriebssystem. Man hat aber ein Virtual Environment. Also muss man dann auch irgendwie darauf aufpassen, hey, bitte nimm hier minus, minus, minus System, minus Site, minus Packages, die Pakete, die auf meinem Betriebssystem installiert sind, hinzu in das Virtual Environment und benutzt die Route auch. Kann man machen. Bei mir hat das jetzt allerdings zu einem kleinen, ja, unschön Problem geführt. Ich habe nämlich PIP-AMF benutzt. So, ich mache jetzt den kleinen gegebenenfalls PIP-AMF-Exkurs. PIP-AMF ist ein echt nettes Tool, das man benutzen kann, um sein Projekt zu managen. Also es macht das Virtual Environment automatisch fein auf, legt das irgendwie in einem Directory ab und ruft es automatisch wieder auf, wenn man da irgendwie mit PIP-AMF dran arbeitet, also in dem Directory, wo man das angelegt hat. Man kann mit PIP-AND-RUN Befehle aufrufen und so weiter. Aber man kann auch zum Beispiel Dependencies sehr gut managen. Zum Beispiel kann man prüfen, ob irgendwelche der Dependencies, die man hat, bekannte Sicherheitslücken haben und geupdatet werden sollen. Das ist natürlich sehr bequem. Find ich für eine Mitgliederverwaltung, die sicherheitsrelevante Daten hat, sehr angemessen. Total cool und alles. Allerdings PIP-AMF hat irgendwie ein Back, weshalb etliche Version davon nicht die Command-Line-Parameter übernehmen für System-Site-Packages. Und deshalb kann PIP-AMF in allen Versionen, die ich so installiert gekriegt habe, ohne dass man alles um die Ohren flog, nicht Pakete außerhalb des Virtual Environment benutzen. Also um das dann zu benutzen, musste ich erst mal PIP-AMF rauswerfen. Na gut, der Back ist gefixt, irgendwann wird es sicherlich auch wieder Version gehen, wo es gibt, geben werden, wo es geht. Aber gut, kleine Exkurs, es ist dauernd irgendwie so was. Na ja, schauen wir mal weiter, weil Sachen zu verschlüsseln ist ja das eine. Ich möchte ja auch Kies herunterladen. Wir haben das bisher in der Mitgliederverwaltung so geregelt, dass es nur eine Key ID gibt, die man dem Datensatz hinzufügen kann. Das ist halt irgendwie eine Trust-on-First-Site. Und der Mitgliedsantrag hat halt ein Feld dafür, wo drin steht, hier kann sein GPT-Key eintragen, wir speichern das dann und gucken dann auf die klassischen Key-Server, wo denn dieser Key liegt, laden den herunter und benutzen den. Und das war alles wunderbar, hat ganz gut funktioniert. Bis dann eines Tages, Hagrid kam. Hagrid ist ein Key-Server auf Basis von Sequoia. Sequoia hatte ich ja eben schon vorgestellt, einen Rust geschrieben. Der hat übrigens dieses Signature-Flooding-Problem, was ich erzählt habe, nicht. Der kommt damit klar und kann sich halt irgendwie gegen Signature-Spamming behaupten. Und der macht auch ein paar andere Sachen, sehr hübsch. Zum Beispiel, wenn man die klassischen Key-Server sich anschaut, die sind so gebaut, dass man nur Daten hinzufügen kann. Das heißt, wenn ich jetzt den Key von jemanden anderes nehme, den diese Person mir anvertraut hat und den auf diesen Key-Server hochlade, dann ist er dort hinzugefügt und kann nicht mehr entfernt werden. Oder kann die Person, der dir dieser Key gehört, so viel machen, wie sie möchte, die kann den Key noch wieder woken, aber die Information, diese E-Mail-Adresse zu dem Namen existiert und ist dort auf den Key-Server hochgeladen. Das ist natürlich privacymäßig nicht so geil. Darum kann zum Beispiel Hagrid eine Bestätigung der Keys per E-Mail machen. Schickt dann halt an alle IDs, die in dem Key hinterlegt sind, eine E-Mail und sagt, bist du sicher, dass hochladen möchte, sag mal, hier okay. Nur dann wird der Key freigeschaltet. Gute Sache. Ja, außerdem muss man an dieser Stelle auch anmerken, die klassischen Key-Server sind in einem obskuren Occamal-Dialekt geschrieben. Und die Software dahinter ist ein cleverer Algorithmus zum geschickten Verteilen und so weiter, der uns synchronisieren, der Server untereinander. Ist halt eine Doktorarbeit eines PhD-Studenten, wie auch immer gewesen, und ist super smart, aber halt auch echt schwierig zu maintainen. Es gibt wenig Leute, die den Code lesen können, es passieren wenige seltene Verbesserungen daran. Und das ist bei Hagrid jetzt ein bisschen anders. Das ist natürlich ganz schön. Diese Vorteile haben auch viele Leute erkannt. Und deshalb, wenn man sich mal auf der Webseite von Hagrid anschaut, hat dieser Key-Server einen leichten Siegeszug zurückgelegt. Enigmail benutzt seit einiger Zeit keys.openpgp.org als neuen Default-Server. GPG Suite für MacOS benutzt den, die Open Keychain für Android, Peknos für iOS. Also im Wesentlichen ist das der Default-Server auf allen neuen Geräten. Und das ist auch schön. Jetzt haben wir allerdings folgende Situation. Wir haben natürlich in der Mitgliederverwaltung lauter Leute, die die alten Key-Server noch benutzen. Und neu hinzukommende Leute, die diese neuen Key-Server nutzen, die teilweise gar nicht wissen, dass es da zwei verschiedene Universen gibt, die nicht miteinander reden. Und sagen aber, mein Key ist doch auf den Key-Server, der ist auf keys.openpgp.org, aber nicht auf den klassischen Key-Server, nur muss man den dazu erklären. Und dann wollen sie aber nicht auf die alten Key-Server hochladen, weil da ist ja nicht die Bestätigung. Und das sind nicht so sicher, den Vertrauen sind nicht so, wie den neuen, die sie nur unterstützen wollen. Gibt es Silikone für hin und her. Und aus der Mitgliederverwaltungssicht ganz klar, checken wir den Key einfach auf beiden. Prüfen wir einen der alten Key-Server, prüfen wir den neuen. Geht nicht mit Gloopiegee. Also zumindest nicht auf schöner Weise. Gloopiegee hat da eine Config-Datei, wo der Key-Server drin steht. Und dann kann man auch mehrere Key-Server eintragen. Aber Gloopiegee nimmt einfach nur, ich weiß gar nicht mehr, den ersten oder den letzten Eintrag aus dem Config-File. Und das war's. Das heißt, wenn ich mir die Key-Server abfragen möchte, dann läuft es im Endeffekt darauf hin aus, dass ich eine Config-Datei editiere, den GPG Agent und Deer-Manager, glaube ich, weiter muss ich da an der Stelle neu starten, dass die Config-Datei nur eingelesen wird. Ich glaube, je nach Version muss ich nur einarbeiten, egal. Und dann muss ich das für jedes Mal, wenn ich einen neuen Key-Suche auf zwei verschiedenen Servern wiederholen. Und das eignet sich natürlich irgendwie gar nicht für, ich möchte das für 2.000 Mails, OK, 2.000 Mails sind nicht verschlüsselt, sagen wir mal 200 verschlüsselte Mails, parallel machen. Das wird doch garantiert in die Hose gehen. Also, unschön. Aber wir sind nicht die einzigen mit dem Problem. Die haben das zu lösen. Zum Beispiel gibt es HKP, HKP 4 Pi. HKP ist der Name des Protokolls, mit dem die Schlüssel von den Key-Servern angefragt werden und hochgeladen werden. Und dieses kleine Python-Modul kann direkt mit den Key-Servern reden und die Keys runterholen. Das ist ziemlich simpel, es hat ATP, was da im Endeffekt gesprochen wird. Und das ist auch ganz schön, da hat man die Möglichkeit zu sagen, hier, ich habe diese und jeden folgende Key-Server und bitte laden wir doch mal den Key von dort runter und dann können wir sich die Keys alle runterladen. Und dann kann man sie in Knopigee, einfach die ganz normalen GPGME-Pinnings, die ich schon vorgestellt hatte, importieren mit der Funktion Key-Import. Und alles ist schön. Nur, ich bin hier an dieser Stelle erst mal voll auf die Nase geflogen, weil meine GPGME-Pinnings haben gar kein Key-Import. Ja, weil ich benutze Ubuntu LTS 1804, ich mag ja noch Stabilität und ich muss nicht jedes Jahr mir ein neues Ubuntu-Update und so. Ja, 1804, nur zwei Jahre alt, ist aber schon total veraltet aus Knopigee Sicht, denn Key-Import gibt es in Python-Mindings erst seit irgendwie 18.10.2018, also noch keine zwei Jahre. Das ist nie gelangeneu, dass das da eingebaut wurde. Das heißt, das ist auch wieder so ein Ding. Da sind wir wieder am Anfang, will ich jetzt meinen GPG upgrade? Es ist wirklich so ein Moment, wo ich denke, es ist einfacher, mein Betriebssystem abzugraden und einfach noch mal, weiß ich nicht, im Juli, glaube ich, ist offiziell der Moment, wo man sagt, man sollte LTS-Updates freischalten, solange warte ich, glaube ich, einfach noch. Na gut, also auch ansonsten, wenn ihr auf die Idee kommt, sonst Source-Install zu machen mit GPG, das sind einfache 30 Schritte, circa ganz bestimmt gar keinen Fag-Up-Pomptenzial und na ja. Eigentlich will ich es ja simpel halten. Ich mag es gerne, wenn Sachen simpel sind und nicht zu viele komplexe Schritte haben und möglichst wenig Fehler quellen. Also gucken wir mal weiter. Also, nein, sagen wir so. Mit GPGME, wenn man es richtig macht, ja, kriegt man seine Sachen verschlüsselt. Man muss halt nur die ganzen steilbar fallen wissen. Ich habe sie jetzt alle einmal genannt. Gibt es vielleicht noch die ein oder andere, die ich schon nicht mehr wahrnehme. Aber gut, so kommt man hin. Man kann Sachen verschlüsselt. Man kann Kies runterladen. Man kann Sachen einschlüsseln, Kies erstellen. Ist vielleicht auch interessant für den Private Key, mit dem man die Sachen, die rausgehen, signiert oder sowas. Okay, schauen wir mal weiter. Weil wir möchten jetzt nicht nur einfach verschlüsselte Inhalte haben. Wir wollen ja auch, dass die Inhalte als MIME, PGP MIME Nachricht rausgehen. Es gibt auch den alten Standard, die PGP Nachricht. Das war einfach nur die verschlüsselte Nachricht als Anhang ranhängen. Wird von den meisten Mailern auch noch unterstützt, ist aber sehr unschön eigentlich. Und das PGP MIME ist viel eleganter, besser. Kommt die Mailer besser mit klar. Okay, PGP MIME. Was gibt es da denn? Gibt es auch wiederhaufen Python-Module, die man sich mit PIP anschauen kann? Einzelne Erste, das auffällt, ist PGP MIME. Und das macht eine paar Sachen sehr hübsch. Das nutzt zum Beispiel das S1-Protokoll. Das ist, wenn ich dann alles richtig verstanden habe von den Sachen, die ich mir angeschaut habe im Source, von diesem Modul oder auch in der Doku von GNU-BG. Das S1-Protokoll ist das, was auch die GPG-Me-Bindings quasi mit der GPG-Lib sprechen. Und da wird über ein Socket, Kommandos ausgetauscht. Ist ziemlich stabil, funktioniert gut. Das Problem ist, auf diese Weise haben Sie zwar ganz viel von diesen Subprocess-Aufrufen, die immer problematisch sind, umgang, aber für ein paar Sachen ist es immer noch notwendig und so weiter. Aber das ganze Ding ist von 2012. Da war das letzte Mal irgendwie mit dran. Hat einen Prof für seine Studenten geschrieben. Passiert nicht mehr so viel. Und das ist ein bisschen schwierig, finde ich. Aber ich hätte lieber etwas, das besser noch maintained wird. OK, E-Mail GPG. Das ist ein sehr dünner Layer, der eigentlich nur meinem Nachrichten zusammensetzt und gar nicht mal irgendwie das GPG-Binding macht. Das wurde von den Leuten hinter... Ach, mein Gott, jetzt fällt mir der Name gerade nicht ein. Liefer ich noch nach vielleicht. Rise-Up, glaube ich war das. Hinter den, die Leute, die hinter Rise-Up stehen, glaube ich, haben das Zeug hier entwickelt. Jedenfalls, das wurde einmal 2018 erstellt. Doku ist quasi leer. Ich meine, es gibt eine Doku, HTML, kann man sich durchklicken. Und es gibt nur Überschriften. Aber wenn man dann den Source Code durchschaut, stellt man dann fest, ja, in der Standard-Konfiguration macht das gar nichts mit Verschlußung. Der Encoder ist der Encode No-Op. Aber alles, was man machen muss, ist eigentlich diesen Encode No-Op da, den Encoder selber bauen. Und die API ist ja sichtlich aus den Sourcen. Und das könnte eigentlich ganz gut funktionieren. Ich habe es ehrlich gesagt noch nicht probiert. Aber das ist auf jeden Fall auf meiner Tutorialste für eine der nächsten Sachen, die ich mir anschaue. So, Deep-D-Mail Encrypt. Das Ding ist eine eierlegende Wolle mit Mesao. Das macht wieder genau das Gleiche wie vorher. Die anderen Module mit den Sub-Process-Aufrufen. Außerdem bindet es Viren-Scanner ein, macht Spam-Detektion, ist ein eigenständiger S&T-Pacer, der dazu gedacht, ist sich vor seinen eigenen E-Mail davorzustellen und quasi als Gateway zu fungieren. Viel zu overblown für das, was ich hier vorhabe. E-Mails versenden mit GPG. OK, GPG Mime. Noch so ein Projekt. Benutzt Python mit OPG. Das ist das Python-Paket, das älteste das ganz vom Anfang, das mit den ganz vielen Sub-Process-Aufrufen und den sehr heißen Lücken, die vermutlich alle gefixt sind. Aber ist eigentlich, was ich nicht nutzen möchte. Crypto Mime. Das selbe in Grün. Benutzt die Python-Grip-IG-Bindings. GPG-Lip-Lip. Hier wird es interessant. Benutzt Python, Gnupigie oder GPG Mime. GPG Mime ist der Name auch in Pipei gewesen für die offiziellen Python-Bindings, Beindings, bevor sie offiziellen wurden. Das war nämlich eigentlich auch noch so ein Projekt, das jemand aufgesetzt hat und dann zu den offiziellen übernommen wurde. Aber dabei gab es noch mal eine Umbenahmung. Die ist hier noch nicht mitgemacht worden. Und der letzte Commit ist aus 2017. Und das sieht leider nicht so aus, als ob das mit dem aktuellen GPG zusammenarbeiten wird. Also, das ist auf so einem Library, wo ich dann sage, ich glaube, da gucke ich jetzt erst nicht mal mal rein. Das lohnt sich vermutlich nicht. Also, ganz ehrlich, am Ende bin ich an der Stelle angekommen und habe gesagt, okay, lass es uns selber bauen. So Mime ist jetzt auch gar nicht so schwierig. Dann da irgendwie E-Mail.mime-Pakete in der Python Standard Library, die ganzen Funktionen sind da. Und so eine Mime-Mail aufzubauen, jetzt kurz Exkurs in pgp-mime, wie das funktioniert. Man hat eine Multi-Part-Mixed. Das ist sozusagen der äußere Container. Der ist da mit dem Content-Type. Die erste Zeile fängt da an, ganz unten hört er auf. Das ist wieder diese gleiche Zeile mit der Zahlenfolge. Und dazwischen gibt es dann ein Alternative-Abschnitt. Und im Alternative-Abschnitt hat man einmal Textplane und Text-ATML. Das ist wunderschön, dann kann man nämlich weitere Varianten einer Mail raus senden und der Empfänger kann entscheiden, ob das HTML oder den Plane Text sich anschaut. Und dann nach dem Alternative-Teil gibt es dann noch den Teil des Anhangs. Und da kann ich den Anhang einfach wiederholen, mehrere Anhänger ranhängen. Und der Anhänger ist dann einfach immer angezeigt, weil der ist nicht im Alternative-Block drin. Fun Fact am Rande, Apple-Mail bekommt das nicht hin. Wenn jemand in der Standard-Einstellung eine E-Mail mit Apple-Mail mit Anhang schickt und wir uns die anschauen, dann schauen wir uns die üblicherweise als Plane Text an. Und dann wird der Anhang nicht angezeigt, weil der Anhang nur als Anhang des HTML-Teils gemacht wird. Naja, ärgerlich, aber gut. So, das Ganze wird dann mit OpenPGP verschlüsselt. Also ich muss irgendwie sowas bauen, mit diesem meinem Zeug, verschlüsselt das mit OpenPGP und hängen das dann einfach noch mal in ein meinem Mail ran. Und zwar, was ich rausbekomme, ist an der Verschüttung dieser Teil von Beginn PGP Message bis End PGP Message. Und den stecke ich dann einfach in ein Multipart Encrypted Container rein. Soweit eigentlich wunderbar. Das heißt, das sind die Schutte, die man so machen muss. Man muss sich sein GPG, das man irgendwie benutzt, aussuchen, irgendwie die Python-Binding sind bekommen und dann das Ganze noch in meinem verpacken. Ja, und am Ende empfehle ich, wenn man die ganzen Schritte alle zusammen hat und das alles durchführt, sich ein einfaches Setup zu machen. So ein Test-Setup kann sein, dass man die Datei einfach in ein .eml schreibt und das .eml kann man dann in Thunderbird mit der Nickmail öffnen und kann das Ganze einfach prüfen. Also, mein Fazit, ich empfehle euch, nimmt euch die Python-Bindings, die offiziellen vom GloopieG größer oder gleich 2.0.12, da gab es noch ein paar Änderungen ab dieser Version, ist es vernünftig nutzbar. Und nehmt dabei die Python-Bindings, die von eurem Betriebssystem mitgeliefert werden, nicht die aus PyPy, dann benutzt HKP for Py für die Kommunikation mit den Key-Servern und dann baut euch ein wenig selber MIMe drum herum. Das kann übrigens gar nicht so einfach sein, da lohnt es sich auf jeden Fall nochmal in die Definition der Standards reinzuschauen, wie denn genau dieses PGP MIMe, also den FC dazu, funktioniert. Ist auch echt einfach, im Internet zu finden. So, ich würde sagen, total tolles Ökosystem macht richtig viel Spaß damit zu arbeiten und ich bin bereit für eure Fragen.