====== Chatten per XMPP über RKor.Info ======
Hier ist Instant Messaging in der »XMPP Welt« beschrieben. [[www:delta-chat|Delta Chat]] erlaubt das Chatten per Email.
===== Warum nicht WhatsApp? =====
Ich habe [[blog:2016:0312_koerperverletzung_und_sklavenhandel|hier]], [[blog:2011:1003_facebookfreie_zone|hier]] oder [[wiki:im|hier]] unter Kormann.Info schon dargelegt, warum die im Internet am weitesten verbreiteten Instant Messenger (und soziale Medien) für mich nicht in Frage kommen. Die Stärken des Internets sind offene Standards und seine dezentrale Struktur, die durch WhatsApp (und Facebook) mit Füssen getreten werden.
Ein demokratischer Messenger für alle ist nicht WhatsApp, sondern basiert – zum Beispiel – auf XMPP. Dann ist der Chatter Kunde und nicht Ware.
===== Wie funktioniert es? =====
Das [[wpde>Extensible Messaging and Presence Protocol]] XMPP ist ein quelloffener Standard mit einer Server/Client-Architektur ganz analog zu WhatsApp – technisch und historisch richtiger wäre es umgekehrt – mit dem kleinen aber feinen Unterschied, dass es keine zentrale Anlaufstelle, sondern viele Server gibt. Wer Messages verschicken möchte, kann sich einen XMPP Client – einige Vorschläge finden sie weiter unten – besorgen oder einen Web Client nutzen, sich bei einem Server seiner Wahl anmelden – neben diesem Server finden sie Vorschläge zum Beispiel [[https://compliance.conversations.im|hier]] oder [[https://list.jabber.at|hier]] – und den Kreis der Chatter erweitern.
==== Die Registrierung: Jabber Identifier ====
Ihre Registrierung – hier bei RKor.Info – entspricht der Erstellung eines persönlichen [[wpde>Jabber_Identifier|Jabber Identifiers JID]] (mit Passwort), in meinem Fall ''robert@rkor.info'', also der Nutzer (Node) ''robert'' auf der XMPP Domain ''rkor.info''. Ein anderes Beispiel ist ''rokoinfo@jabber.de'', der Nutzer ''rokoinfo'' auf dem Server oder besser der Domain ''jabber.de''.
Die Struktur einer JID ist also analog zu einer Emailadresse, sie könnte theoretisch gleich sein (das [[wpde>GMX/Web.de_Multimessenger|gab]] es mal), muss aber nicht.
Leider musste ich die öffentliche Registrierung im März 2020 wegen Vandalismus einstellen, bitte fragen sie per [[xmpp+admin@kormann.info|Email]] an. So klein kann ein Service gar nicht sein, dass sich nicht ein Schwachkopf findet, der versucht Unsinn damit anzustellen…
==== Die Grundlagen ====
Die Basisfunktion von XMPP ist der Chat oder das Gespräch zwischen zwei Teilnehmern oder JIDs, die nicht notwendigerweise in der gleichen Domain liegen müssen. Spricht also ''robert@rkor.info'' mit ''rokoinfo@jabber.de'', so verbindet sich mein Client oder meine Benutzeroberfläche mit dem Server ''rkor.info''. Dieser leitet die Nachricht weiter an die Domain ''jabber.de'', und dieser an den dortigen Teilnehmer ''rokoinfo@jabber.de''. Das geht selbst dann, wenn letzter gerade nicht online ist: Die Nachricht wird einfach so lange auf einem Server von ''jabber.de'' zwischengespeichert.
Letztendlich ist das identisch zu den aus XMPP entwickelten proprietären Lösungen [[wpde>WhatsApp]] oder – ehemals – [[wpde>Google Talk]], es gibt bei diesen lediglich sehr zur Freude der NSA, des BND und der Firmen selbst nur einen Server – genauer riesige Serverfarmen – und damit ein geschlossenes Ökosystem. Dessen Daten lassen sich wunderbar sammeln und analysieren. Dabei sind vor allem die [[https://netzpolitik.org/2014/metadaten-wie-dein-unschuldiges-smartphone-fast-dein-ganzes-leben-an-den-geheimdienst-uebermittelt/|Metadaten]] interessant, weniger die Chatinhalte.
Der [[wpde>Multi-User Chat]] stellt bereits eine [[wpde>XMPP_Extension_Protocol|Erweiterung]] [[https://xmpp.org/extensions/xep-0045.html|XEP-0045]] des XMPP-Protokolls dar. Darin können sich mehrere JIDs – auch nicht notwendigerweise aus einer Domain – unterhalten, ganz analog zum älteren [[wpde>Internet Relay Chat]]. Es ist wie das Gemurmel in einer Lobby, in meinem Beispiel ''lobby@chat.rkor.info''.
==== XMPP Clients ====
[[wpde>Liste_von_XMPP-Clients|XMPP Clients]] gibt es fast wie Sand am Meer, entweder als Browseranwendung, also einem Web Client, oder als Programm oder neudeutsch App.
Auf dem Server RKor.Info ist der Web Client [[https://chat.rkor.info|Converse]] installiert, bei dem Sie sich mit einer JID aus der Domain RKor.Info anmelden können. Der MUC ''lobby@chat.rkor.info'', »Roberts Lobby« steht allen offen.
Empfehlenswert sind für Windows [[https://www.pidgin.im|Pidgin]], für Linux [[https://gajim.org|Gajim]] oder Pidgin, und für Android [[https://conversations.im|Conversations]]. Sie unterscheiden sich neben den unterschiedlichen Rechnerplattformen noch in ihrem Funktionsumfang und ihrer Anwenderfreundlichkeit. Conversations ist der anwenderfreundlichste, bei den Lösungen für PCs geht die Flexibilität und Funktionenvielfalt immer etwas auf deren Kosten.
Auf Basis von GTK+/Vala entsteht [[https://dino.im|Dino]], ein sehr moderner und stylischer Client, zunächst für die Linux-Welt.
Diese nativen Programme können sich außerdem JID und Passwort merken, so dass Sie sich im Gegensatz zum Web Client nicht jedes Mal selbst einloggen müssen. Das übernimmt der native Client.
===== Noch Fragen? Die FAQs =====
==== Registrierung ====
**Q**
++ Es klappt einfach nicht: Ich kann mich nicht registrieren! |
**A** Sowohl das Anmeldeformular von Converse als auch das des Servers reagieren sachrichtig, aber nicht besonders kundenfreundlich auf eine ungültige Registrierung. Ungültig kann eine Registrierung sein, falls der Node (erster Teil des JIDs) zu kurz ist – mindestens vier Zeichen – oder schon existiert. Converse spuckt //Access denied by service policy// oder //User already exists// aus, beim Anmeldeformular des Servers erhalten Sie ein //Not allowed// oder ein //The account already exists//. Nicht gerade charmant, aber wie gesagt immerhin richtig!
++
**Q**
++ Ich kann den angegebenen Link zur Registrierung nicht erreichen. |
**A** Befinden Sie sich in einem öffentlichen WLAN? In einem Hotel-WLAN? Oder innerhalb einer Firma? Dann könnte das sein. Ihr Browser muss auf Port 5281 von RKor.Info zugreifen können, und der außergewöhnliche Port wird manchmal geblockt. Firewalls für den Heimanwender verhindern das in aller Regel nicht. Versuchen Sie es über [[https://chat.rkor.info|Converse]] und der dortigen Registrierungsmöglichkeit.
++
==== Chat & Converse ====
**Q**
++ Ich kann JIDs unter »Alle« nicht löschen. |
**A** Der sogenannte »Shared Roster«, zu deutsch etwa »gemeinsames Adressbuch«, enthält alle registrierten JIDs von RKor.Info und kann nur vom Administrator bearbeitet werden.
++
**Q**
++ Mein neu angelegter Kontakt erscheint unter »Unbestätigte Kontakte«. Was bedeutet das? |
**A** Der neue Kontakt muss die Kontaktaufnahme bestätigen. Wenn er dieses tut, erscheint er unter »Ungruppiert«.
++
**Q**
++ Ich würde die Kontakte unter »Ungruppiert« gerne anders organisieren. Wie geht das? |
**A** Das geht in Converse bisher nicht. Sie benötigen dafür einen Client, der die Bearbeitung ihres »Rosters« ermöglicht.
++
**Q**
++ Ich würde gerne Bilder oder Dateien an meinen Kontakt senden. Wie geht das? |
**A** Worauf zu achten ist, steht weiter unten unter [[xmpp#dateiuebertragung|Dateiübertragung]].
++
**Q**
++ Kann ich meine Nachrichten Ende-zu-Ende verschlüsseln? |
**A** Mehr zu diesem Thema finden sie weiter [[xmpp#verschluesselung|unten]].
++
==== Sonstiges ====
**Q**
++ Ich will keinen weiteren Instant Messenger installieren? |
**A** Versuchen sie es mit [[https://chat.rkor.info|Converse]], das lässt sich selbst auf kleinen Handys – getestet auf Android im Firefox und im Browser von Lineage OS – noch akzeptabel bedienen. Solange man darüber eingeloggt bleibt, ertönt selbst ein Piepser bei einer neuen Nachricht.
++
**Q**
++ Gibt es eigentlich noch andere sinnvolle Messaging-Lösungen? |
**A** [[wpde>Alternativlos]] sind nur politische Entscheidungen, beim Instant-Messaging hat man trotz WhatsApp die Qual der Wahl. Wikipedia, das sich gut als Einstieg in die IM-Welt eignet, fasst die [[wpde>Liste_von_Instant-Messaging-Protokollen|Alternativen]] schön zusammen. Achtet man aber auf »grüne Zeilen« in dieser Tabelle, wird es fast wieder alternativlos: [[https://matrix.org|Matrix]] macht vieles richtig, es handelt sich aber um einen jungen und von einer Firma getriebenen Standard – mal sehen, wohin hier die Reise geht: Firmeninteresse kann Dinge beschleunigen, ist aber ein zweischneidiges Schwert. Im Moment (April 2018) bemühen sie sich aber um Ausgewogenheit zwischen wirtschaftlichen Interessen und denen der Anwender. Email, also [[www:delta-chat|Delta Chat]], und das serverlose [[wpde>RetroShare]] käme vielleicht noch in Frage. [[www:threema|Threema]] mausert sich mehr und mehr zur einsteigerfreundlichen Lösung für Datenschutzbewusste. Sie lassen ihre Software [[https://threema.ch/de/faq/code_audit|extern auditieren]], und der Client ist seit Ende 2020 [[https://threema.ch/de/faq/source_code|Open Source]]. Eine neuere Quelle (seit 2020) für den Technologievergleich ist die [[https://www.messenger-matrix.de|Messenger-Matrix]] des [[https://www.kuketz-blog.de|Kuketz-Blog]].
++
===== Zur Technik =====
==== Der XMPP Server von RKor.Info ====
RKor.Info nutzt eine der am weitesten verbreiteten XMPP Serversoftware, [[wpde>Ejabberd|ejabberd]]. Sie ist so eingestellt, dass Sie sich selbst [[https://rkor.info:5281/register/|registrieren]] können. Der Node muss dabei mindestens vier Zeichen umfassen. Sie können aus Gründen der Sicherheit in einem bestimmten Zeitintervall nur eine begrenzte Anzahl an Registrierungen vornehmen.
Wenn Sie offline sind, merkt sich der Server bis zu 1000 Mitteilungen an Ihre JID. Sie können außerdem von verschiedenen Clients – zum Beispiel Web, Handy und PC – gleichzeitig und mit der gleichen JID angemeldet sein. Die unterschiedlichen Clients verlängern die JID nach einem Schrägstrich um die »Resource«, also zum Beispiel ''robert@rkor.info/conversations''. Sie können einen Chat am Rechner beginnen und ihn nahtlos im Bus am Handy weiterführen.
==== Verschlüsselung ====
»Post Snowden« spielt Verschlüsselung eine immer größere Rolle. Der MUC ''lobby@chat.rkor.info'' gilt dabei als unverschlüsselt, was nicht heißt, dass Ihre Mitteilungen unverschlüsselt über das Internet transportiert werden. RKor.Info erzwingt die Verschlüsselung zwischen Client und Server ganz analog zu HTTPS. Die Verschlüsselung für Verbindungen von Server zu Server wird nicht erzwungen, sie ist aber der Regelfall. Auf dem Server liegt Ihre Mitteilung aber unverschlüsselt vor, was grundsätzlich ein Mitschneiden der Chats auf dem Server erlauben würde, aber bei RKor.Info nicht gemacht wird. Was soll ich auch mit den Daten?
Das können Sie nun glauben, müssen Sie aber nicht. Abhilfe schaffen [[wpde>Ende-zu-Ende-Verschlüsselung|Ende-zu-Ende Verschlüsselungen]] wie [[wpde>OMEMO]] ([[https://omemo.top|Are we OMEMO yet?]]), [[wpde>OpenPGP]] oder [[wpde>OTR]]. Die Verschlüsselungsprotokolle müssen dabei immer von beiden Clients beherrscht werden. Die älteren Verfahren OTR und OpenPGP haben gegenüber dem modernen OMEMO einige [[https://conversations.im/omemo/|Einschränkungen]]. Der oben beschriebene Pidgin spricht alle drei Verfahren über Plugins, Gajim – ebenfalls über Plugins – und Conversations sprechen OpenPGP und OMEMO, und Converse beherrscht OMEMO (Stand: Januar 2020).
So weit, so schön, für eine sichere Kommunikation über öffentliche Kanäle sind allerdings noch zwei weitere Punkte einzuhalten: (1) Sie müssen sich sicher sein, dass der geheime Teil des Schlüssels vom Client erzeugt wurde und auch beim Client bleibt, und (2) dass der Serverbetreiber nicht unbemerkt einen weiteren Client in die Unterhaltung einschmuggelt oder den Schlüssel heimlich austauscht. Nur dann ist dieser wirklich nicht imstande der Unterhaltung zu folgen. Bei FOSS, also »Free and Open Source Software«, können sich Spezialisten den Quellcode ansehen, und beide Punkte überprüfen und bestätigen. Bei geschlossenen Systemen ist das letztlich nur durch die Einschaltung Dritter möglich, und müsste für jede neue Software-Version wiederholt werden. Das ist schwierig bis unmöglich. Einfacher ist hierbei sich Gedanken zu machen über das Geschäftsmodell des Betreibers und die Rechtslage im jeweiligen Betreiberland.
Für wirkliche Ende-zu-Ende-Verschlüsselung mit OMEMO müssen Sie also die Identität der Geräte eines Teilnehmers über deren Fingerprints überprüfen. Für meine JID ''robert@rkor.info'' lauten die OMEMO Fingerprints (Stand: Januar 2024, als QR Code hinter den Programmnamen, zum Beispiel für den Scan mit Conversations):
**++ Gajim | [[xmpp>robert@rkor.info?omemo-sid-6b3449bdcfce64d8c608bde1fd954bef
deb60a9fb12c034c7e172c4d7cb9c816|robert@rkor.info]] ++** ''6B3449BD CFCE64D8 C608BDE1 FD954BEF
DEB60A9F B12C034C 7E172C4D 7CB9C816''
**++ Conversations | [[xmpp>robert@rkor.info?omemo-sid-51042148=39c1b5bdc58296a0d2ebed5f57f02a85d6c5c249a2bf875329e40a22a258a10a|robert@rkor.info]] ++** ''39C1B5BD C58296A0 D2EBED5F 57F02A85 D6C5C249 A2BF8753 29E40A22 A258A10A''
**++ Dino | [[xmpp>robert@rkor.info?omemo-sid-1928464081=1202541fd907b59ca6143f9368d4bbf969e08dfb4ce3471ab139538e3733ef44|robert@rkor.info]] ++** ''1202541F D907B59C A6143F93 68D4BBF9 69E08DFB 4CE3471A B139538E 3733EF44''
In Conversations wird diese Identifikation über den gegenseitigen Scan von QR Codes bewerkstelligt. Der Hinweis über die Verschlüsselung von Nachrichten wechselt dann vom Schloss – E2E-verschlüsselt und ohne Identifikation vertraut – zum Schild, also verschlüsselt und Gerät über einen Seitenkanal wie den hier platzierten QR Codes und Fingerprints identifiziert. Gajim und Dino spucken auf Verlangen die Fingerprints aus.
==== Dateiübertragung ====
Neben den reinen Mitteilungen lassen sich auch Bilder oder allgemein Daten über einen XMPP-Server übertragen. Im Fall von RKor.Info funktioniert dies über einen verschlüsselten HTTP Upload ([[https://xmpp.org/extensions/xep-0363.html|XEP-0363]]). Ihr Upload (max. 100 MiB pro Upload, max. 256 MiB insgesamt) liegt über einen begrenzten Zeitraum (14 Tage) auf dem Server und kann von dort durch den Client des Gesprächspartners verschlüsselt wieder heruntergeladen werden. Typischerweise unterstützen XMPP Clients dabei: Sie werden wie Chatbeiträge oder Anhänge dazu behandelt.
Viel Spaß beim Chatten!
===== Anhang: Für Neugierige hier noch mehr »Tech Sprech« =====
* Weiterführende Links zum Thema XMPP und Instant Messenger finden Sie im [[wiki:im|Wiki]] unter Kormann.Info.
* Sehr kenntnisreich und gut lesbar ist [[https://gultsch.de/xmpp_2016.html|The State of Mobile XMPP in 2016]] des Hauptentwicklers von Conversations, Daniel Gultsch.
* Ein schön gemachtes [[https://www.youtube.com/watch?v=68G4js91xrQ|Tutorial]] (20min Film) des Konkurrenzprodukts Tigase erklärt den Informationsaustausch (XMPP-Protokoll) zwischen Client und Server.
* Theoretisch kann ein XMPP Client seinen Benutzer über neue Nachrichten informieren. Technisch nennt sich das Server Push, und ist grundsätzlich in XMPP kein Problem. Kniffelig wird das allerdings auf Handys durch die Beschränkungen der Hersteller, siehe dazu »An Excurse on Push« in obigem Artikel von Daniel Gultsch. Auf Android kann man die App Conversations für Benachrichtigungen freischalten und erhält die Hinweise des Servers, nicht aber auf iOS.
* Dateiübertragung: Ihre übertragene Datei oder Ihr Bild liegt für den oben angegebenen Zeitraum verschlüsselt auf dem Server, unverschlüsselt ist lediglich der Dateiname. Das OMEMO Plugin von Gajim reicht den Inhalt des Links aber ohne Entschlüsselung – häufig ein Bild an den Bildbetrachter – weiter. Der [[https://github.com/iNPUTmice/ImageDownloader|ImageDownloader]] von Daniel Gultsch liefert einen Ausweg.
* Android Conversations startet den Dienst XmppConnectionService, dessen irregulärer Abbruch zum Verlust von Nachrichten führen kann. Also Vorsicht mit dem »Abschiessen« von Conversations.