(Update 1 am 09.2.18: Hintergrundaktualisierung ergänzt)
(Update 2 am 13.2.18: Details ergänzt / erläutert u. bessere Strukturierung ergänzt)
(Update 3 am 15.2.18: Angeheftete Server-Zertifikate ergänzt)
(Update 4 am 27.1.19: Auswahltipps für XMPP-Server eingefügt)
Leider sind den meisten Nutzern von Messenger-Apps wie WhatsApp die technischen Grundlagen nicht klar. Welche Verletzungen der eigenen Datenschutzinteressen sie damit (un)wissend in Kauf nehmen, und dies auch stellvertretend und stillschweigend für all ihre Kontakte festlegen, ist ihnen somit (meist) auch nicht klar.Diejenigen die sich aber mit diesem Thema beschäftigen, weichen dann oft auf alternative Messenger wie Threema, Signal oder Telegram aus. Leider sind auch alternativen Messenger in den meisten Fällen auch gleich problematisch (siehe dazu z.B. den allgemeinen Teil dieses Beitrags im Blog v. Mike Kuketz).
Eine schon lange existierende Alternative ist das Instant-Messaging auf Basis von XMPP (früher Jabber). Es benötigt im Gegensatz zu den meisten der jüngeren Alternativen keine Telefonnummern, und vor allem auch keinen zentralen Server über den die gesamte Kommunikation abgewickelt wird. Statt dessen werden dezentrale XMPP-Server verwendet, die sich bei Bedarf untereinander vernetzen um Nachrichten serverübergreifend auszuliefern. Solche Server betreiben neben Firmen oft auch Privatpersonen, die ihre Server teilweise sogar zur freien Registrierung eines XMPP-Kontos und zur freien Nutzung für alle anbieten – z.B. dismail.de, honigdachse.de (hier sogar direkt aus dem Client heraus), simplewire.de, trashserver.net oder wiuwiu.de.
Bei der sorgfältig zu treffenden Auswahl eines Serverbetreibers kann als Anhaltspunkt z.B. dessen Datenschutzerklärung, aber auch seine Website herangezogen werden. Sind in der Website Tracker, Google-Fonts oder -API eingebaut, ist es dort sicher auch sonst beim Datenschutz nicht so weit her. Die Auswahl also sorgfältig treffen – und vor allem auch ein Passwort verwenden das sonst nirgends verwendet wird.
Um einmal einen kleinen Eindruck über die Verbreitung zu bekommen, kann man sich die Serverliste beim XMPP-Compliance-Tester von Daniel Gultsch anschauen. Hier können Serverbetreiber die Einhaltung diverser Standards für XMPP-Server kontrollieren lassen. Die Liste ist nur ein Ausschnitt der betriebenen XMPP-Server, denn Serverbetreiber müssen sich hier selbst eintragen und das machen bei weitem nicht alle.
Hier soll es nun darum gehen die iOS-App ChatSecure in Betrieb zu nehmen. Dazu wurde vorab auf einem der frei verfügbaren XMPP-Server (siehe obige Liste) ein persönliches, kostenfreies Konto angelegt. Verwendet wurde hier trashserver.net, wobei das sinngemäß mit den anderen Servern ziemlich gleich abläuft. Nach der Auswahl eines Benutzernamens, eines Passworts, und dem Lösen einer trivialen Rechenaufgabe ist man registrierter Benutzer und hat eine XMPP-ID (früher Jabber-ID).
Unter Apples iOS ist die kostenfreie, quelloffene App ChatSecure zu empfehlen. Aktuell ist sie unter iOS die einzige App die auch die OMEMO-Verschlüsselung unterstützt. Voraussetzung für die nachfolgende Anleitung ist eine bereits vorab registrierte XMPP-ID (siehe oben).
Hintergrundaktualisierung
Da man für den iOS-XMPP-Client ChatSecure einen Push-Dienst benötigt, muss sicher gestellt sein, dass die Hintergrundaktualisierung generell, und für ChatSecure speziell, aktiviert ist. Zur Kontrolle, bzw. Korrektur, in den iOS-„Einstellungen“ (App mit Zahnrad-Icon) den Bereich „Allgemein“ -> „Hintergrundaktualisierung“ -> „Hintergrundaktualisierung“ (ja … 2-mal) ansteuern. Dort einstellen ob die Hintergrundaktualisierung aktiv ist, und festlegen ob das nur bei WLAN-Verbindung oder auch bei mobiler Datenverbindung geschehen darf. Im nachfolgenden Beispiel sind beide Varianten erlaubt.
Anschließend wieder eine Ebene zurück. Hier kann pro App festgelegt werden ob die generell aktivierte Hintergrundaktualisierung für diese App greift, oder nicht. Das muss später, nach der ChatSecure-Installation, für diese App aktiv sein – Thema: Push-Dienst v. ChatSecure.
ChatSecure-Installation und Vermeiden der ersten Stolperfalle
Der eigentliche Start ist dann die Installation der zugehörigen App aus dem Apple App Store.
Nach der erfolgreichen Installation kann ChatSecure gestartet werden, und präsentiert sich dabei mit dem folgenden Dialog. Es geht dabei darum, der Software ein XMPP-Konto zu hinterlegen über das Kommunikation abgewickelt werden soll. Dabei nun im allgemeinen kein neues Konto erstellen, sondern ein vorab angelegtes Konto zu hinterlegen. Wenn man über diesen Dialog ein neues Konto erstellt, wird es beim Anbieter Zom erstellt. Um dies zu vermeiden, und mit einem XMPP-Provider der eigenen Wahl zu arbeiten, hier nicht „Neues Konto erstellen“ antippen!
Bestehendes XMPP-Konto verwenden
Dieser Beitrag geht davon aus, dass man sich vorab, bei einem Anbieter der eigenen Wahl, ein Konto mit XMPP-ID registriert hat, oder dies eben sogar auf einem eigenen Server betreibt. In diesem Fall ist hier auf jeden Fall „Bestehendes Konto hinzufügen“ anzutippen.
Es wird daraufhin der nachfolgende Dialog angezeigt.
Hier sind 3 Angaben erforderlich:
- Ein selbst zu wählender Spitznamen. Dieser Spitznamen wird bei späteren Kontakten in deren Kommunikation als Namen angezeigt. Man kann hier aber natürlich auch den echte Namen hinterlegen.
- Einen Benutzernamen, was in diesem Artikel bislang als XMPP-ID bezeichnet wurde.
- Das zur XMPP-ID gehörige Passwort.
Spätere Kontakte können ggf. noch sehen mit welcher Software oder Gerät man online ist. Dies ist die sogenannte „Ressource„. Wer möchte kann also auch noch diese Angabe (oben steht dort vorausgefüllt chatsecure19754) anpassen. Damit sieht der Dialog dann so aus – sofern man alle vier Angaben angepasst hat:
Tippen Sie oben rechts, das Häkchen an um das Konto mit diesen Einstellungen bei ChatSecure zu hinterlegen.
Im dann folgenden Dialog sollte auf jeden Fall „Push aktivieren“ angetippt werden. Ein solcher Dienst ist bei iOS, im Gegensatz zu Android, erforderlich. iOS erlaubt es einer App normalerweise nicht, dauerhaft eine Netzwerkverbindung offen zu halten (schont u.a. den Akku). Tippen Sie also hier auf „Push aktivieren„.
Der darauf folgende Dialog zeigt eigentlich das Ende der Einrichtung an. Man könnte nun u.a. gleich Kontakte hinzufügen, was aber später gezeigt werden soll. Die „Push Warnung“ ist derzeit leider normal und etwas verwirrend. Wie nachfolgend gezeigt, kann diese Warnung aber erst einmal ignoriert werden. Tippen Sie deshalb das Häkchen oben rechts an.
Damit ist die Grundeinrichtung abgeschlossen. Die normale ChatSecure-Oberfläche wird angezeigt. Die linke Spalte zeigt die verfügbaren Kommunikationspartner an, ist derzeit aber natürlich noch leer.
Hier steht „natürlich“ deshalb, weil im Gegensatz zu WhatsApp & Co. nicht sofort alle Telefonnummern mit dem Server synchronisiert werden. Anwender entscheiden hier selbst mit wem sie Kontakt haben wollen.
Probleme mit Push-Dienst beheben
Bevor wir nun Kommunikationspartner (Kontakte) hinzufügen, kümmern wir uns zuerst noch um das Problem mit dem Push-Dienst. Dazu tippen Sie auf das Zahnrad-Icon um die ChatSecure-Einstellungen aufzurufen.
Hier sieht man, neben dem Konto von „Hans Mustermann“, erneut das Problem in Form eines gelben Warnhinweises (Ausrufezeichen). Tippen Sie hier auf das direkt daneben stehende Informatios-Icon „i“. Sie gelangen damit in die Konten-Einstellungen der betreffenden XMPP-ID, in der über das i-Warn-Icon auch hier ein Problem angezeigt wird.
Hier bitte einmal mit zwei Fingertipps beim XMPP-Server abmelden …
… und direkt danach wieder anmelden.
Nach kurzer Wartezeit, sollten man a) wieder mit dem XMPP-Server verbunden sein und b) das i-Warn-Icon verschwinden. Bei Interesse kann man sich noch die „Serverinformation“ anzeigen lassen, was aber nicht erforderlich ist.
Verlässt man die diversen Dialoge, ist man wieder in den Einstellungen, wobei das i-Warn-Icon am Konto nun nicht mehr angezeigt wird. Wir haben ChatSecure damit betriebsfertig eingerichtet.
Verlassen Sie die Einstellungen über „Unterhaltungen„. Sie gelangen wieder in die noch leere Normalansicht von ChatSecure.
Kontakt hinzufügen
Für eine Kontaktaufnahme ist es, wie bei E-Mail auch, erforderlich die XMPP-ID des zukünftigen Kommunikationspartners zu kennen – übrigens ein weiterer Vorteil dieser Technik! Ein zentrales Verzeichnis solcher XMPP-IDs gibt es, wie bei E-Mail, nicht! Sie müssen also die XMPP-ID von Kommunikationspartnern erst in Erfahrung bringen.
Wenn Sie die XMPP-ID eines zukünftigen Kontakts kennen, tippen Sie in dieser Ansicht oben links auf das Icon „Blatt mit Stift“.
Hier dann auf „Freund hinzufügen„. Im angezeigten Dialog tragen Sie nun im Feld Benutzernamen die XMPP-ID des Kontakts ein (hier andreas@grupp-web.de). Bei Name geben Sie gleich noch an wie dieser Kontakt später bei Ihnen benannt sein soll. Das übersteuert den vom Kommunikationspartner übermittelten Spitznamen.
Tippen Sie abschließend das +-Icon an.
Der erste Kontakt ist nun im linken Bereich von ChatSecure zu sehen. Im Hintergrund hat ChatSecure dabei schon mit dem XMPP-Servers des neuen Kommunikationspartners den notwendigen Kontakt aufgenommen, und um Autorisierung der Kontaktanfrage ersucht.
Diese sieht der neue, potentielle Kontakt allerdings nur wenn er online ist. Gegebenenfalls müssen Sie also noch eine Weile auf die Autorisierung warten. Ist diese aber erfolgt, sieht der Kontakt in ChatSecure so aus:
Ein der beiden Seiten, Sie oder der neue Kommunikationspartner, können nun Nachrichten austauschen.
Das war es! Einer grundsätzlichen Kommunikation steht nichts mehr im Wege!
Verbindlich die OMEMO-Verschlüsselung aktivieren
Wir, bzw. ich, wollen es aber in Hinblick auf eine Ende-zu-Ende-Verschlüsselung ganz sicher haben – auch dann wenn unser Kontakt offline ist. In dem Fall landen Nachrichten nämlich ggf. unverschlüsselt auf dem XMPP-Server unseres Kontakts. Um das zu verhindern, müssen im Profil unseres Kontakts noch Änderungen an der Verschlüsselungseinstellung vorgenommen werden. Das muss, sofern die Gegenseite das auch kann, bei jedem Kontakt einzeln eingestellt werden.
Um die notwendige Einstellung vorzunehmen, tippen Sie erst den betreffenden Kontakt an, um dann dessen Profil durch eine Fingertipp auf des i-Icon ganz oben rechts in der ChatSecure-Oberfläche anzuzeigen (im nachfolgenden Dialog im Hintergrund, oben rechts, zu sehen). Als Ergebnis sieht man in einem Dialog das Profil, mit den für die Verschlüsselung genutzten Schlüsseln (hier drei OMEMO-Schlüssel).
Werden keine OMEMO-Schlüssel angezeigt, unterstützt die Client-Software des Kommunikationspartners eventuell OMEMO nicht. In diesem Fall wäre es sinnvoll sich zuerst auf eine Software zu verständigen die das unterstützt. Als Fallback-Lösung wäre notfalls noch OTR möglich. Ohne Ende-zu-Ende-Verschlüsselung zu arbeiten ist abzulehnen.
In diesem Dialog tippen Sie nun auf „Erweiterte Verschlüsselungseinstellungen„. Die dort zu findenden Einstellung ist standardmäßig auf „Beste verfügbare“ eingestellt.
Stellen Sie das durch einen Fingertipp fest auf „OMEMO“ um …
… und schließen Sie den Dialog über „Fertig„. Dieser Schritt ist leider bei jedem neuem Kontakt erneut durchzuführen.
Angeheftete Server-Zertifikate
Ein weiterer, kleiner Fallstrick kann in ChatSecure eine integrierte Sicherheits-Fähigkeit sein die andere XMPP-Clients gar nicht berücksichtigen. Es geht um die TLS-Serverzertifikate (früher SSL-Serverzertifikate) die als Basis für eine sichere Transportverschlüsselung und als Ausweis für den Server dienen. ChatSecure speichert das Serverzertifikat eines akzeptierten XMPP-Servers nämlich lokal ab. Ändert sich das Serverzertifikat, warnt ChatSecure vor einem geänderten Serverzertifikat und bittet den Benutzer um manuelle Bestätigung, dass ein neues Zertifikat akzeptiert werden soll. Der Benutzer ist nun in der Pflicht den Zertifikatswechsel zu kontrollieren und dann manuell zu bestätigen. Lehnt der Benutzer das neue Zertifikat ab, ist keine Kommunikation über den XMPP-Server mehr möglich!
Hintergrund: ChatSecure ist unter Verwendung dieser Fähigkeit in der Lage einen Man-in-the-middle-Angriff auf die Transportverschlüsselung zu erkennen. Das Feature dürfte nach meiner Erfahrung die meisten Anwender aber überfordern.
Generelles Fazit und Lösungsansatz: Sofern Sie als Anwender mit dieser Anfrage von ChatSecure überfordert sind, entscheiden Sie auf Basis ihres aktuellen WLANs, ob Sie hier zustimmen. Taucht diese Rückfrage nämlich just in dem Augenblick auf in dem Sie sich in einem fremden WLAN aufhalten, kann es in der Tat sein, dass ein Man-in-the-middle-Angriff vorliegt. Warten Sie in dem Fall ab bis Sie wieder in „sicheren Gefilden“ (also z.B. in Ihrem eigenen WLAN) sind und kontrollieren Sie dann ob die Warnung immer noch kommt. In einem WLAN bei dem Sie von einem solchen Angriff nicht ausgehen, wäre dann eine Akzeptanz des neuen Zertifikats eher angesagt. Absolut sicher können Sie sich aber nur sein, wenn der Serverbetreiber Ihnen den Zertifikatswechsel bestätigt und dabei den neuen Fingerabdruck mitteilt – etwas was leider eher nicht üblich ist.
Lösung falls Kommunikation bereits gestoppt und nicht mehr möglich ist (z.B. weil ein Zertifikatswechsel abgelehnt wurde, das aktuell gültige Serverzertifikat gelöscht wurde, …): Bei älteren Versionen von ChatSecure geschah dies leider auch automatisch wenn das Zertifikat auf dem Server gewechselt wurde. Ohne Warnung wird dann die Verbindung abgebaut. In den aktuellen Versionen erscheint in dieser Situation nun ein Dialog – bei dem man aber eventuell das neue Zertifikat abgewiesen hat. In beiden Fällen äußert sich das, neben der nicht funktionierenden Kommunikation, in dieser Ansicht des betreffenden Kontos in den Einstellungen:
In diesem Fall das i-Icon, rechts neben dem Konto, antippen. Sie gelangen dann in die Kontenansicht. Da es dort den Link „Anmelden“ gibt, ist eine nicht bestehende Server-Verbindung erkennbar.
Tippen Sie nun „Anmelden“ an. ChatSecure baut nun eine Verbindung zum Server auf und Sie erhalten die Möglichkeit das Serverzertifikat zu akzeptieren.
Dabei ist der Name des Servers, sowie die SHA-Prüfsumme des Zertifikats (auch als „Fingerabdruck“ bezeichnet) erkennbar. Durch Antippen von „Speichern“ können Sie das Zertifikat nun akzeptieren und damit in ChatSecure speichern. Eine Kommunikation sollte anschließend wieder möglich sein.