Murmeli

This page describes Murmeli for German-speakers so that they can also get involved. For the English discussions, please see the main page.

Diese Seite versucht eine mögliche Alternative für Nachrichten-Austausch zu beschreiben, die aktuell in der Entwicklungsphase ist. Die ist hier publiziert in der Hoffnung, auch deutschsprachige Begeisterte zu finden die Murmeli vielleicht dann nutzen wollen oder auch bei der Entwicklung mithelfen wollen.

Dieses Thema geht allgemein um Kommunikation. Welche Mittel haben wir momentan, miteinander zu kommunizieren, und erfüllen sie das, was wir von ihnen wollen? Sind diese Kommunikationskanäle sicher, privat, und unter unsere Kontrolle, oder sind sie im Dienst von anderen Interessen?

Alle wissen schon, dass Email nicht sicher ist. Alle Emails die durch das Internet geschickt werden fliegen im Klartext, für alle mitzulesen. Wie eine Postkarte die auch vom Pöstler schnell gelesen werden kann, aber Emails können natürlich auch ganz ohne Spuren kopiert, gespeichert, weitergeleitet, durchsucht und für die Ewigkeit archiviert werden. Wollen wir das? Stört uns das nicht? Es gibt schon lange die Möglichkeit, Emails zu verschlüsseln, zum Beispiel mit PGP und Plugins wie Enigmail. Das funktioniert zwar, aber nur bedingt - es ist mühsam das aufzusetzen, heikel (Miskonfigurationen können dazu führen, dass die Emails scheinen verschlüsselt zu sein, sind aber nicht), verwirrend (OpenPGP, S/MIME, HTML, Anhänge) und am Ende ist die Verschlüsselung eine aufgeklebte Teillösung, ein Versuch das grundsätzlich unsichere Email System partiell zu verbessern. Es ist immer noch völlig lesbar von wem so eine verschlüsselte Email geschickt worden ist, für wen sie ist, wie gross sie ist, wann sie geschickt worden ist, wie die Subjektlinie lautet, eventuell zu welcher Email diese eine Antwort ist, und so weiter. Diese Email schreit sogar "ich bin geheim" während sie durch die Systeme fliegt. "Ich bin interessant, seid ihr nicht neugierig?" schreit sie strahlend durch die Gegend.

Das Teilen von Fotos ist auch ein wichtiger Anwendungsfall. Oft wird das per Email gemacht aber dann stösst man schnell gegen Einschränkungen über Emailgrössen. Das System ist einfach nicht für grösseren Datenmengen konzipiert worden. Sogar wenn es sicher wäre, ist Email nicht dafür geeignet. Dann müsste man einen Blog einrichten, zum Beispiel, um die Fotos zur Verfügung zu stellen - aber dann sind die Fotos für die ganze Welt zugreifbar, und das Teilen geht nur in eine Richtung.

Aber Email ist soweiso schon für viele irrelevant geworden, seit proprietäre "soziale" Systeme wie Facebook, WhatsApp, Twitter, Instagram u.a. populär geworden sind. Warum Emails checken wenn man Nachrichten innerhalb von so einem System lesen and schicken kann? Und die Dienste sind sogar gratis! Aber natürlich können Facebook und co. dann alle deine persönliche Nachrichten, Meldungen und gepostete Fotos lesen und analysieren (und für die Ewigkeit archivieren), für Werbungszwecke nutzen und für das möglichst hohe Gewinn verkaufen. Wollen wir das wirklich? Haben wir ein gutes Gefühl dabei, wenn wir alles mit diesen Korporationen, und ihren Partnern, teilen?

Und was ist mit Privatsphäre?

Wir haben das Bedürfnis, Information mit unseren Freunden zu teilen. Aber wäre es nicht schön, wenn wir auch kontrollieren könnten, mit genau wem diese Information geteilt werden soll? Wenn ich was mit meinen Freunden diskutiere, will ich dass das auch für meine Eltern sichtbar ist? Und umgekehrt? Wenn ein Kollege von mir ein Foto veröffentlicht, und ich eine Kommentare dazu füge, sollte meine Kommentar für die ganze Welt sichtbar sein, oder nur für die Leute die ich kenne? Und sollte ich Kontrolle darüber haben, oder sollen nur die Aktionäre eines Grossunternehmens für mich entscheiden?

Und so kommen wir zu den Ideen und Vorschlägen für ein anderes System, das uns erlauben würde, einander verschlüsselte Nachrichten zu schicken und selbst bestimmen zu können, wem wir vertrauen. Ursprünglich wurden diese Ideen unter dem Namen "Murmur" (englisch für "murmeln") veröffentlicht, um die Idee zu vermitteln dass ich dir etwas murmeln könnte, sodass nur DU es verstehen kannst, und sonst niemand. Leider hat es sich herausgestellt, es gibt schon nicht nur ein, sondern zwei Kommunikationswerkzeuge mit dem Namen. Deshalb wurde dieses (noch nicht existierendes) System nach "Murmeli" umgetauft. So heisst ein Murmeltier auf Schweizerdeutsch und auch auf Finnisch. Und das obwohl es schon offensichtlich ist dass Murmeltiere nicht murmeln, sondern laut pfeifen. Aber die sind trotzdem süss.

Wir brauchen doch keinen Server!

Was soll dieses Murmeli machen und wie?

Murmeli sollte dich erlauben, dich mit deinen Freunden ungestört und privat zu unterhalten. Das heisst, kurze Nachrichten für alle Freunde, längere Diskussionen zu Zweit, Besprechungen unter Gruppen, Ferienfotos und Reiseberichte, Vorschläge für Kinomontag, Kuchenrezepte, Witze. Für jede Nachricht solltest du bestimmen können, genau wer sie lesen kann, ob nur eine Person, mehrere, oder Freundeskreise. Aber keine Riesenkonzerne.

Murmeli wird auf deinem PC laufen, und wird alle Nachrichten dort speichern. Dein PC verbindet sich dann ohne Server zum PC deines Freundes, und schickt die Nachricht verschlüsselt mit seinem oder ihrem öffentlichen Schlüssel. Aber die Nachricht geht durch das Tor Netzwerk, und deshalb ist es für Netzwerkschnüffler ziemlich schwierig herauszufinden von wem das Paket ist oder für wen es ist. Soweit so gut. Aber ohne Server, besteht nicht das Gefahr, dass dein Freund nicht gleichzeitig wie du online ist? Was dann?

Stell dir vor, ihr habt beide einen anderen Freund, der auch vernetzt ist. Falls der Empfänger nicht gerade online ist, kannst du die Nachricht an den Freund schicken (immer noch nur für den Empfänger verschlüsselt), and falls später die beiden gleichzeitig online sind, kann die Nachricht (immer noch schön verschlüsselt) weitergeleitet werden. Je mehr gemeinsame Freunde ihr habt, desto kurzer wird die Lieferzeit der Nachrichten.

Bausteine

So ein System kann nicht vom flachen Boden aufgebaut werden. Wir brauchen Bausteine die wir zusammen stellen können. Und nach langem Überlegen haben wir folgende Bausteine an der Reihe:

Diese Abhängigkeiten sind für Windows ein bisschen (aber nur ein bisschen) mühsam zu finden und installieren. Für Linux kann man sie einfach aus den Standard-Repositorys holen, zum Beispiel für Debian wären sie python3, python3-pyqt5, python3-pyqt5.qtwebengine, tor, python3-pysocks, gnupg, python3-gnupg, python3-tempita und python3-pil (die Versionen aus Stable).

Hauptfenster

Einfaches GUI mit Menü
und einem bisschen CSS

Freundeskreis

Darstellung des Freundeskreis

eigenes Profil

Eigenes Profil aus der Datenbank

Kontakt hinzufügen

Neuen Kontakt hinzufügen
anhand seines Ids

Nachrichten schreiben

Neue Nachricht schreiben

Nachrichtenbaum

Nachrichten und Antworten

led graph

Verkehrsinformation mit LEDs

Diese Screenshots hier zeigen ein Bisschen vom aktuellen Entwicklungsstand.

Die Grundlage vom Zusammenpacken und Verschlüsselung und Signieren (Unterschreiben) von den Nachrichten funktioniert, und die können auf der anderen Seite entschlüsselt, verifiziert und entpackt werden. Wir haben schon Verbindungen zum Tor, zur Datenbank und zum Verschlüsselungssystem, und wir haben schon die Unterstützung mehrerer Sprachen (momentan nur englisch und deutsch). Aber es wird eine schöne Weile dauern, bis Murmeli wirklich in der Lage ist, sicher zu arbeiten.

Aktueller Stand: Murmeli kann jetzt eine Kontaktabfrage durch Tor abschicken (nötigerweise unverschlüsselt), und kann die empfangen, entpacken, speichern und anzeigen. Der User kann die dann entweder akzeptieren (mit einem verschlüsselten Nachricht) oder ablehnen, und diese Antwort wird dann zurück durchs Tor geschickt. Beim Annehmen werden beide Seiten aktualisiert sodass beide einander in der Kontaktliste sehen, und beide den öffentlichen Schlüssel des Anderen im eigenen Keyring haben. Jetzt ist Kontakt aufgebaut, und es geht darum, die Schlüsseln zu bestätigen um die Person als "vertraut" bezeichnen zu können. Dafür wird eine Wortreihe aus den Schlüsseln generiert, die z.B. übers Telefon verglichen werden kann.

Nach der Bestätigung der Schlüsseln können die Status-Meldungen automatisch ausgetauscht werden, inklusiv Profilinformation und -Bild. Normale Nachrichten können geschickt werden (mit wiederholtem Versuch) und auch via gemeinsame Freunde weitergeleitet werden.

Zwei Freunde, die nicht miteinander verbunden sind, können einander vorgestellt / empfohlen werden. Es ist auch möglich, nach so einer Vorstellung zu fragen.

Hilfe ist auf jedem Fall sehr willkommen, egal ob Kritik, Vorschläge, Ideen, oder später dann auch Bug-Reports und -Fixes, Übersetzungen, Patches, Grafik, Pull Requests usw. Sobald die Grundlage funktioniert, dann wird es veröffentlicht, wahrscheinlich unter GPL3, und auf Github publiziert. Allerallerminimalste Funktionalität für die erste Version könnte folgendes sein:

Die aktuelle Entwicklungsstatus kann man in diesen neuen Videos auf Youtube ansehen (mit englischer Erklärung):

Es könnte sein, dass bei Version 1 nur Text-Nachrichten (ohne Bilder, ohne Anhänge usw) verschickt werden können. Das blinde Weiterleiten von Nachrichten zwischen Freunden wird nötig für die Zuverlässigkeit (und es funktioniert eh schon), aber das Konzept von "Robot Relays" könnte vielleicht später addiert werden. Ebenfalls die symmetrische Verschlüsselung von Nachrichten kann später kommen. Und natürlich die Darstellung, wie Nachrichten angezeigt werden und die Optionen für Kommentare, Antwort-Bäume, und so weiter, kann überaus später total umgebaut werden, wichtig ist dass Version 1 sicher ist, und was es kann, funktioniert richtig.

Bis jetzt hat die Entwicklung leider viel Zeit gekostet, und ein Umbau der sich leider als nötig erwiesen hat ist immer noch nicht abgeschlossen. Mit ein bisschen Geduld wird es hoffentlich nicht mehr lange dauern, bis Murmeli über Murmeli diskutiert werden kann und das Mitmachen viel einfacher wird.

 

Introduction // Development // Beschreibung // Threats // Questions & answers // Message types // Message sequences // Robot setup