Hadmut Danisch

Ansichten eines Informatikers

Wie kommunziert man „sicher”?

Hadmut
5.12.2020 16:19

Leser fragen – Danisch weiß es auch nicht mehr so genau.

Einige Leute, sogar Journalisten (allerdings nur ausländische), haben in letzter Zeit bei mir angefragt, wie man heute noch sicher elektronisch kommunziert.

Weiß ich nicht. Nicht mehr.

Oder um es besser zu sagen: Die Frage ist zu simpel gestellt und die Lage zu schwierig, um darauf eine einfache Antwort zu geben.

„Sicher” gibt es nicht

Zunächst mal will ich mit einem Denkfehler aufräumen: „Sicher” als absolute, dem Ding innewohnende Eigenschaft gibt es nicht. Es gibt nur die Sicherheit gegenüber einem bestimmten Angriff und einer bestimmten Angreiferposition.

Die Frage ist deshalb überhaupt nur zu beantworten, wenn in der Frage mitgefragt wird, um welchen Angriff es dabei überhaupt geht und wer aus welcher Position angreift.

Einige klassische und einige exotischere Eigenschaften sind

  • Vertraulichkeit (Schutz gegen Mithören)
  • Integrität (Schutz gegen Veränderung)
  • Authentizität (Schutz gegen Fälschung)
  • Eindeutigkeit/Einmaligkeit (Schutz gegen Wiederholung)
  • Beweisbarkeit (der andere oder ein Dritter kann es nicht abstreiten)
  • Unbeweisbarkeit (der andere oder ein Dritter kann es nicht beweisen, man kann es abstreiten)
  • Verstecken (Schutz gegen Entdeckung, dass überhaupt eine Kommunikation stattfindet)
  • Rechtslage (dass eine bestimmte Rechtslage und Jurisdiktion anwendbar oder nicht anwendbar ist)
  • Verfügbarkeit (Schutz gegen Störung/Sabotage/Verlust)
  • Perfect Forward Secrecy (Schutz gegen nachträgliche Aufdeckung)
  • Erpressungsschutz (Schutz gegen Aufdeckung durch Zwang/Beugehaft usw.)
  • Beschlagnahmeschutz (Schutz gegen Angriffe, die auf Beschlagnahme von Gegenständen, Rechten usw. beruhen)

Das sind Eigenschaften, die sich teilweise widersprechen, man kann nicht alles haben.

Besonders den ganzen Bereich der Beweistechniken und Schutz gegen Justiz halte ich für nicht mehr durchführbar, aus dem einfachen Grund, dass sie immer darauf beruhen, einen Beweis gegen ein Gericht zu führen, man also Richter überzeugen muss. Nach meinen Beobachtungen haben wir aber eine immer stärker politisierte und immer verstandsunfähigere Willkürjustiz, die sich von Beweisen nicht mehr beeindrucken lässt und sie auch nicht mehr verstehet und nicht verstehen will.

Beispiel: Wollte man ein Kryptosystem, ein Protokoll so bauen, dass es resistent gegen Beugehaft, Folter und dergleichen ist, würde man es so bauen, dass der einzelne kein Wissen hat, durch dessen Preisgabe er das System kompromittieren kann. Also so, dass man ihn noch so sehr einsperren oder foltern könnte, er kein Geheimnis verraten könnte, dass den Angriff erlauben würde.

In einem ordentlichen Rechtsstaat würde man dann erwarten, dass dies dann auch nicht zu Beugehaft usw. führen kann, weil man Beugehaft nicht für Unmögliches verhängen kann. Wenn dargelegt ist, dass derjenige Betroffene gar nicht in der Lage ist, das Verlangte zu liefern, die Beugehaft den Zweck nicht erfüllen kann.

Das geht aber dann schief, wenn der Jurist den Beweis nicht mehr versteht, und das nicht begreift. Weil die Beugungshaft zwar auch dann den Zweck nicht erreichen kann, trotzdem aber verhängt wird, und schlimmer noch, besonders lange verhängt wird, weil derjenige sich ja nicht befreien kann, indem er der Forderung nachkommt.

Während also zwar der Primärzweck erfüllt wird, das Kryptosystem vor Kompromittierung zu schützen, wird der Sekundärzweck, die Teilnehmer vor Beugehaft zu schützen, indem sie den Zweck nicht erfüllen kann, nicht nur verfehlt, sondern über die dann noch höhere Beugehaft ins Gegenteil verdreht.

Noch schlimmer wird das dann, wenn die Juristen das verstehen, es aber aus politischen Gründen oder Böswilligkeit ausnutzen und im inneren Bewusstsein, dass die Forderung nicht erfüllbar ist, Beugehaft, Folter usw. gerade unbegrenzt anwenden, weil es ihnen nicht mehr primär um die Forderung geht, sondern darum, denjenigen hinter Gitter zu halten oder zu foltern.

Alle die kryptographischen Schutzmaßnahmen, die darauf beruhen, Juristen oder generell Dritte zu überzeugen, Beweise zu erbringen und so weiter, muss man inzwischen als wirkungslos einstufen, weil das Zeitalter der Überzeugung, der Beweiskraft schlicht abgelaufen ist. Man muss inzwischen grundsätzlich davon ausgehen, dass Gerichte gar nichts mehr verstehen, kein Gesetz mehr beachten, und nur noch machen, was sie wollen und das politisch vorgegeben ist.

Das ändert auch die kryptographische Bedrohungslage und die Methoden ganz grundlegend.

Die Softwarekrise

Ein besonders schweres Problem ist, dass man eigentlich kaum noch Betriebssysteme, Hardware, Software hat, die hinreichend fehlerfrei und vertrauenswürdig ist.

Insbesondere Microsoft und allem, was mit Mobilfunk zu tun hat, traue ich noch weniger denn je. Und wnen dann Bill Gates noch blubbert, dass er gegen End-zu-End-Verschlüsselung ist und jegliche Kommunikation automatisiert auf corona-Wahrheit, political correctness und sowas geprüft werden soll, gehen wirklich alle Alarmglocken an.

Allerdings wird auch Linux, früher mal die vertrauenswürdigste Basis, immer schlechter. Man hat das längst alles unterwandert, gegegendert, mit Policies und Codes of Conduct vollgedonnert, sinistre und unfähige Leute reingedrückt und die jahrelang tätigen Entwickler rausgeekelt, und das merkt man sehr deutlich, dass die Qualität rapide sinkt und die Projekte immer schlechter gewartet und dafür immer chaotischer werden.

Auch jenseits der Frage nach dem Betriebssystem und der Plattform: Viele Softwareprojekte sind heute so aus allen möglichen und nicht mehr überschaubaren Libraries zusammengenagelt, dass keiner mehr überblickt, was darin eigentlich so läuft, wer da überhaupt alles mit drin herumrührt.

Es selbst zu schreiben ist aber auch keine Option mehr, weil das inzwischen alles so komplex ist, dass man da alleine mit vertretbarem Arbeitsaufwand auch nicht mehr weit kommt.

Und wenn dann Softwareprojekte auf ihrer Webseite schon damit anfangen, dass sie Black Lives Matter oder Frauen fördern oder sonst irgendwie politisch an die Sache herangehen, dann ist eigentlich alles vorbei mit der Vertrauenswürdigkeit, weil die dann Software gegen jeden einsetzen werden, der ihnen nicht passt.

Selbst wenn man Tokens wie Yubikeys oder TPM-Module usw. einsetzt, um Schlüssel „sicher” zu speichern: Wie vertrauenswürdig kann, wie vertrauenswürdig darf eine Firma überhaupt sein, die ihre Firmensitze in den USA und Schweden hat? Wie weit kann man Geräten trauen, deren Chip von Infineon kommt, die mal Siemens gehörten, ebenso wie die Schweizer Crypto AG mit ihren Hintertüren?

Eigentlich kann man mit der heute verfügbaren Software (und Hardware) keine vertrauenswürdigen Systeme mehr bauen.

Selbst wenn, man kann sie ja nicht vertrauenswürdig halten, weil man ja auch immer wieder wegen der Gefahr von Bugs usw. den Kram aktualisieren muss und dann wieder die Hälfte der Libraries in neuen Version vorliegen und so weiter.

Die harte Nummer

Wenn man es wirklich drauf anlegt, müsste man sich etwas suchen, was man wirklich wieder (wie in den 80er Jahren) komplett und nicht auf Grundlage eines Betriebssystems und fremder Bibliotheken bauen kann und höchstens dem Compiler noch trauen muss.

Im Prinzip wäre der ESP32 dafür gar nicht mal so schlecht, weil der auch schon Kryptofunktionen im Prozessor eingebaut hat, WLAN eingebaut und Ethernet vorbereitet, und man bekommt schon ab einstelligen Euro-Beträgen kleine LC-Displays, mit denen man beispielswiese vertrauliche Nachrichten anzeigen könnte. Leider haben die keine USB-Anbindung, weshalb es schwierig wird, die direkt mit einem PC zu verbinden oder als Pseudotastatur anzuschließen.

(Es ist zwar so, dass die Entwicklerboads einen USB-Anschluss haben, aber der ist nur als Stromversorgungsanschluss und als Zugang zu einem USB-Umsetzer-Chip für die serielle Schnittstelle da.) Man kann auch keine Tastatur ohne weiteres direkt anschließen. Allerdings könnte man sich eine Tastatur beschaffen, ihren Controller entfernen und die Tastaturmatrix direkt an einen ESP anschließen.

Leider gibt es bisher auch nur C-/C++-Compiler, und die Sprache hat wieder alle ihre Schwächen. Könnte man das mit Sprachen und Compilern verbinden, die Pufferüberläufe, Speicherfehler usw. abfangen, wie etwa RUST, käme man damit in den Bereich, in dem man überhaupt mal durchschauen könnte, was die Software macht und dass sie nur das macht. Das ist jetzt aber auch nicht sehr realistisch, dazu braucht es viel Wissen und Arbeitszeit.

Man könnte damit beispielsweise ein Gerät bauen, das per IMAP auf eine Mailbox zugreift, verschlüsselte Mails abruft und im Klartext auf dem Display anzeigt. Oder Texte von einer Webseite abruft.

Aufgaben eben, die man in einem Programm so beschreiben kann, dass man mit vertretbarem Aufwand das ganze Programm lesen und verstehen kann.

Die reale, praktikable Nummer

Einen vertretbaren Kompromiss aus Praktikabilität und daraus, es zumindest mal nicht zu leicht zu machen, würde ich darin sehen, Server unbedingt selbst zu betreiben und keinem proprietären Chat- oder Kommunikationsprotokoll, schon gar keiner Handy-App, und besonders keinem kostenlosen Dienst zu vertrauen. Man weiß eben nicht, was die
App macht und wann sie im Hintergrund automatisch ersetzt wird. WhatsApp, Signal und der ganze Kram: Würde ich alles vermeiden.

Ich würde ein gewöhnliches Mail-Relay hinter einer Firewall aufsetzen. Wichtig: Es selbst betreiben. Das bringt nämlich schon die juristische Sicherheit, keinen Provider zu haben, der zur Herausgabe von Mails verpflichtet wäre. Die ganzen normalen juristischen Auskunftsersuchen prallen so schon mal ab.

Natürlich muss man sich dann selbst um die Pflege kümmern.

Dazu wäre es wichtig, die Sache so zu konfigurieren, dass sie mit denen, mit denen man Informationen austauschen will (das müssen die dann auch machen, so einfach ist das also nicht), alles so konfiguriert, dass alles nur über TLSv1.2 oder 1.3 übertragen wird (enforce, ordentliche TLS-Parameter natürlich), und zwar mit expliziter Schlüsselüberprüfung, wenn möglich auch IP-Adress-Prüfung damit kein Man-in-the-middle oder sowas dazwischen sein kann, auch nicht mit gefälschtem Zertifikat. Am besten wäre natürlich einen Server aufzubauen, der nur mit denen kommuniziert, mit denen man möchte. Optimalerweise noch mit Firewall, die den Zugang auf die Kommunkationspartner beschränkt.

Und darin dann S/MIME- oder PGP-verschlüsselte Mails, mit Schlüsseln, die in einem Token gehalten werden und nicht zugänglich sind, benutzt auf einem Rechner mit eigener und hinter einer externen Firewall, der nur dafür und sonst für gar nichts verwendet wird und keinen eigenen Netzwerkzugang hat. Beispielsweise einen einfachen, preisgünstigen Notebook, dem man das WLAN sperrt (oder einfach ausbaut, wo das geht), Linux, Mail-Client und Firewall drauf, sonst gar nichts nichts, und den hinter eine externe Firewall hängt. Und beide Firewalls so konfiguriert, dass der Notebook nur die nötigen Softwareupdates ziehen und auf die Mailbox zugreifen kann. Insbesondere keinen Web- oder sonstigen Zugriff ins freie Internet, nicht mal DNS.

Alles mit automatisierter Installation, damit man sie im Zweifel schnell, zuverlässig und reproduzierbar neu aufsetzen kann.

Und darauf achten, dass die beteiligten Rechner Hardware-Zufallszahlengeneratoren haben.

Für das Lesen reicht im Prinzip ein Raspberry.