Posts mit dem Label RSA werden angezeigt. Alle Posts anzeigen
Posts mit dem Label RSA werden angezeigt. Alle Posts anzeigen

19.08.2014

SSL-Verschlüsselung und die Vertrauenswürdigkeit

In letzter Zeit wird immer so viel über die Abhöraffäre gesprochen. Manche, insbesondere Politiker, sagen dann immer gern, man müsse sich selber schützen. Das mag natürlich Ablenkung sein, weil sie es sich nicht mit den USA verderben wollen, kann aber auch genausogut das völlige Fehlen von Sachkenntnis bedeuten. Wer weiß das schon so genau bei Politikern.

Zwei Dinge kann man natürlich aus dieser heißen Luft trotzdem mitnehmen: wer aus Prinzip verschlüsselt, macht es den Geheimdiensten schwerer - die Masse macht's. Und man fällt auf und ist damit automatisch verdächtig. Das kann sich jetzt jeder selbst überlegen.

Wie man Emailverschlüsselung einrichtet, wird übrigens hier ganz gut erklärt (am Beispiel von Thunderbird in Windows, das Grundprinzip ist aber bei Mac und Linux fast identisch), und ich hatte das vor einiger Zeit auch schon mal beschrieben.

Was genau passiert nun bei Verschlüsselung, und wie funktioniert Abhören?

Normalerweise nimmt man einen Browser oder ein Emailprogramm und der Computer zuhause - der Client - baut eine Verbindung zu einem anderen Computer auf, dem sogenannten Server, der eine Dienstleistung anbietet, sei das nun WWW oder Email oder Chat oder etwas ganz anderes; für unsere Betrachtungen ist das vollkommen unerheblich.

Ich will jetzt auch gar nicht so ganz im Detail darauf eingehen, wie diese Verbindung funktioniert, aber das OSI-Schichtenmodell spielt dabei eine Rolle, und die üblichen Verbindungen laufen über das TCP-Protokoll im TCP/IP. Wer tiefer Bescheid wissen will, möge den Links folgen.

Bei unverschlüsselten Verbindungen fragt der Client den Server im Klartext, und die Antwort des Servers darauf erfolgt ebenfalls im Klartext. Hier ist es natürlich vollkommen problemlos, den kompletten Inhalt in beiden Richtungen abzuhören, wenn man sich an einer der Knotenstellen dazwischen einklinken kann - Geheimdienste machen das gern am DE-CIX in Frankfurt, da trifft sich so gut wie alles, was Rang und Namen hat ... Die Bundesregierung verweigert übrigens die Antwort auf die Frage, ob deutsche Geheimdienste ebenfalls am DE-CIX abhören. Allein diese Weigerung finde ich schon sehr bezeichnend.

Man erzeugt ein Duplikat des Datenstroms, und schon mit billigen Sniffer-Werkzeugen wie Wireshark kann man gezielt herausfiltern, dass man an einer bestimmten Verbindung des Typs "T" von "A" nach "B" interessiert ist (T=email, A=Thomas, B=pop.gmx.net).

Gut, das wollen wir natürlich nicht (ich zumindest), und deswegen wollen wir es dem Lauscher an der Wand etwas schwieriger machen, und schalten TLS ein. Was bedeutet das technisch? Zunächst einmal bedeutet es, dass wir den modernen neuen Namen verwenden. Früher hieß das nämlich noch SSL, und von diesem Namen stammt auch das "s" für "secure" in den URLs, wie z.B. https://www.ccc.de.

TLS ist eine Sammlung von Methoden und Protokollen, mit denen man ver- und entschlüsseln kann, sowie Prüfsummen nach allen möglichen Standards berechnen kann. Es gibt mehrere Softwarepakete, die TLS bzw. SSL anbieten, darunter das am häufigsten verwendete OpenSSL oder auch GnuTLS.

Das Tolle an TLS ist, dass man die Ver- und Entschlüsselung mit unterschiedlichen Codes durchführen kann (asymmetrische Verschlüsselung). Der Code zum Verschlüsseln kann ruhig bekannt werden; deshalb wird er auch "öffentlicher Schlüssel" genannt. Selbst wenn man ihn besitzt, kann man einen verschlüsselten Text damit nicht wieder lesbar machen. Nur wenn man den dazugehörigen "privaten Schlüssel" besitzt, kann man den Text dechiffrieren. Ein bekanntes Verfahren heißt RSA und wurde nach den Entwicklern Rivest, Shamir, Adleman benannt.

Das asymmetrische Prinzip mit der Aufteilung in einen öffentlichen und einen geheimen Schlüssel hat zwei besondere Eigenschaften, die beide sehr nützlich sind und verwendet werden. Zum Einen kann man mit dem öffentlichen Schlüssel etwas unlesbar machen und nur der Empfänger kann es mit seinem geheimen Schlüssel wieder lesbar machen. Nicht einmal der Absender kann die Verschlüsselung rückgängig machen! Zum Anderen kann der Besitzer des geheimen Schlüssels eine elektronische Unterschrift (Signatur) erzeugen, und jeder kann mit dem öffentlichen Schlüssel prüfen, ob die Unterschrift korrekt ist.

Beim ersten Verbindungsaufbau sendet der Client eine Anfrage, ob der Server Verschlüsselung unterstützt. Falls ja, bietet er eine Liste von Verschlüsselungsverfahren an und sendet auch gleich seinen öffentlichen Schlüssel mit (in Wahrheit ist es etwas komplizierter, aber das ist das Prinzip). Mit diesem öffentlichen Schlüssel kann also der Client schon mal chiffrierten Text an den Server schicken, und nur der Server kann ihn wieder lesbar machen.

Soweit, so cool ... aber wie geht der Rückweg?

Im Prinzip funktioniert der Weg der Serverantworten genauso, nur andersrum ;).

Der Client und der Server einigen sich auf ein bestimmtes Verschlüsselungsverfahren (z.B. AES) und tauschen beim Verbindungsaufbau einen geheimen Schlüssel aus, der nur für diese eine Verbindung verwendet wird. Diesen etwas komplizierten, umständlichen Weg geht man, weil das asymmetrische Verfahren sehr rechenaufwändig ist. Man setzt es deshalb nur einmal ein, um einen zufällig gewählten Code für ein schnelleres, typischerweise symmetrisches Verfahren auszutauschen.

Soweit, so cool ... aber woher weiß ich, dass der Server wirklich die Maschine ist, die ich ansprechen will und nicht eine andere Kiste, vielleicht wurde ich sogar umgeleitet mittels Angriffsmechanismen wie DNS-Fälschung, ARP-Fälschung usw.?

Jetzt wird's komplizierter ;). Erst mal weiß ich das nicht. Der Server bietet mir beim Verbindungsaufbau seinen öffentlichen Schlüssel an. Aber ich weiß noch nicht, ob das alles zusammenpasst. Ich kann natürlich über einen anderen Weg prüfen, ob der "Fingerabdruck" (fingerprint) des öffentlichen Schlüssels korrekt ist, aber dann müsste ich mir selbst eine Liste von Fingerprints aufbauen für alle Webserver, Emailserver usw., mit denen ich sprechen will.

Üblicherweise geht man einen anderen Weg: man lässt sich den öffentlichen Schlüssel "signieren" von einem vertrauenswürdigen Dritten, einer sogenannten Zertifizierungsstelle. Und man vertraut dann nicht jedem einzelnen öffentlichen Schlüssel jedes Servers, sondern einmalig der Zertifizierungsstelle. Das sind die "Vertrauenswürdigen Institutionen" in den Interneteinstellungen bei Windows bzw. die "Authorities" im Firefox-Browser.

Das ganze scheitert dann, wenn diese Zertifizierungsstellen unterwandert oder kompromittiert werden, und dafür gibt es leider mehr als genug Beispiele, eben weil diese Abhörmöglichkeit extrem attraktiv ist.
  • Vor einigen Jahren wurde die niederländische DigiNotar gehackt und gefälschte Zertifikate für bekannte Hostnamen von Google und anderen signiert (insgesamt gab es über 500 gefälschte Signaturen)
  • neulich gab es eine schlimme Panne in der Türkei 
  • aus dem Iran ist bekannt, dass 2011 zum Abhören gefälschte Zertifikate für google.com erkannt wurden, vermutlich vom Einbruch bei DigiNotar
  • das israelische Unternehmen StartSSL wurde angegriffen
  • ein Angriff auf die französische ANSSI ist noch ungeklärt
  • und jetzt aktuell wurde bekannt, dass die staatliche NIC von Indien ebenfalls versucht hat, mit Zertifikaten für Hostnamen bei Google und Yahoo ihre Bürger abzuhören.

Das Problem ist nämlich: wenn das Zertifikat gefälscht ist, d.h. "falsch" signiert ist, funktioniert es technisch immer noch problemlos und sieht immer noch genauso vertrauenswürdig aus, obwohl es jemand mit böser Absicht erzeugt hat und verwendet. Nur die "Unterschrift" ist von einer anderen Stelle, der mein Browser aber ebenfalls vertraut. Nur wenn man weiß, dass das Zertifikat normalerweise von Verisign signiert wird und eben nicht von "NIC India", dann springt einem die Fälschung sofort in's Auge.

Das wäre genauso, als ob man bei einem Brief nur darauf schaut, dass er handschriftlich unterschrieben ist, aber man prüft nicht, ob die Handschrift wirklich "echt" ist.

Googles Chrome-Browser prüft übrigens bei einigen Hostnamen, ob das Zertifikat von der richtigen Instanz unterschrieben wurde, und schlägt Alarm, wenn man auf diese Weise auf eine Fälschung trifft. Diese Prüfung heißt "certificate pinning" - man legt in der eigenen Software fest, welche Signatur erwartet wird.

Als Fazit lässt sich sagen: die Mathematik lässt sich (derzeit) nicht austricksen, aber das System der vertrauenswürdigen Signaturstellen ist gehörig angeknackst, um nicht zu sagen: es ist kaputt.

Das Problem ist natürlich offensichtlich und wird auch bereits unter Sicherheitsforschern diskutiert. Eine Möglichkeit ist, dass jede Certificate Authority, die Signaturdienstleistungen anbietet, öffentlich macht, für wen sie Zertifikate ausgestellt hat. Damit könnte jeder Browser prüfen, ob ein Zertifikat wirklich hochoffiziell von dieser CA signiert werden durfte.

Bislang gab es eine gewisse Vertrauenswürdigkeit in die Signaturstellen, aber das ist in's Wanken geraten mit Bekanntwerden der Tatsache, dass insbesondere amerikanische Geheimdienste gern man mit geheimgehaltenen Gerichtsurteilen die Herausgabe aller Schlüssel erzwingen, wie etwa im Fall des Emaildienstleisters Lavabit.

Ein weiterer Ansatz ist eine Sperrliste. Da greift aber erst, wenn einem Besitzer aufgefallen ist, dass ein gefälschtes Zertifikat im Umlauf ist oder ein echtes gestohlen wurde. Die Browser können bei einer Auskunftsinstanz nachfragen, ob ein gegebenes Zertifikat (noch) gültig ist oder widerrufen wurde. Einerseits hat dies mächtige Performance-Probleme, weil für jedes Zertifikat eine Anfrage abgeschickt werden muss. Andererseits ist das ein riesiges Problem für die Privatsphäre, wenn ich einer weiteren Instanz mitteile, wo ich gerade surfe. In Firefox und Chrome gibt es diese Technik, da aber Google diese Probleme als zu schwerwiegend ansieht, ist das Feature abgeschaltet. Es gibt aber technische Weiterentwicklungen, wie z.B. eine einzelne zentrale Sperrliste.

03.07.2013

Wir brauchen keine Paranoia, es ist alles wahr

Und da sage noch einer, Science Fiction sei übertrieben. Die Realität ist viel schlimmer als alles, was sich SF-Autoren wie George Orwell ausdenken. Es ist überhaupt nicht mehr nötig, eine gesunde Paranoia zu pflegen, es reicht, wenn man die Tageszeitung liest.

Jeden Tag neue Enthüllungen, wer wen wann abhört. Nicht nur Privatleute, sondern sogar diplomatische Vertretungen. Alles natürlich nur zum Schutz vor Terror.

Wir sind von Freunden umzingelt, die uns abhören. Ob ausländische Geheimdienste in Frankfurt am DE-CIX abhören, ist unklar. Technisch möglich wäre es, weil auch ausländische Provider in Frankfurt Stellplatz im Rechenzentrum haben. Ob die nun wirklich ausschließlich an ihren eigenen Geräten fummeln oder auch mal zum Nachbarschrank gehen?

Um es mal ganz klar zu sagen: wenn ich bei einem sozialen Netzwerk schreibe, ist das meine eigene Entscheidung. Ich übernehme die Verantwortung für das, was ich öffentlich schreibe (dass Eltern Bilder ihrer Kinder veröffentlichen, ist ein anderes Thema). Dass aber jemand ungefragt heimlich meine Daten mitschneidet und dann jahrelang politisch nicht kontrolliert alle Verbindungs- und vermutlich auch Inhaltsdaten über mich speichert, ist ein unglaublicher Mißbrauch. Angeblich wurden ja nur um die 50 Anschläge verhindert. Und dafür wird jeder weltweit verdächtigt und ausgeforscht?

Was kann man dagegen machen?
Kann man was dagegen machen?

Dieselben Fragen stellen sich, genau wie in meinem Artikel über Privatsphäre im Browser.

Zunächst einmal: ich habe ein Recht auf Privatsphäre. Das bedeutet, dass es niemanden was angeht, was ich tue, wenn ich es nicht selbst freigebe. Es geht den Staat nicht mal 'was an, ob ich etwas zu verbergen habe. Das ist meine Privatsache. Auch im Internet. Punkt. Wichtige Inhalte werden ja auch nicht auf Postkarten geschrieben, sondern in Kuverts gesteckt. Besonders wichtige Mitteilungen werden per Einschreiben oder sogar mit Postzustellungsurkunde verschickt (quasi ein reitender Bote, der als Zeuge die Zustellung und auf Wunsch sogar den übermittelten Inhalt bestätigen kann).

Es gibt verschiedene Hilfsmittel für den Schutz verschiedener Privatsphäre-Schutzverletzungen (flacher Scherz aus Windows-Zeiten, geb ich zu).

Surfen

TOR

TOR ist ein Verschleierungswerkzeug, um zu verhindern, dass jemand erfährt, wie und wo ich mich im Internet bewege, also ein Anonymisierungswerkzeug. TOR ist ein Netzwerk aus "Nodes", die als Proxy arbeiten und meine Anfragen hin- und herschieben, ohne den Absender aufzuzeichnen. Erst der "Exit node" reicht die Anfrage wieder "hinaus" ins Internet, und die Antwort geht denselben Weg schrittweise zurück. Jeder Node kennt aber nur seine Nachbarn. Natürlich kann man mit viel Aufwand jeden Schritt beobachten, und vermutlich wird das auch gemacht. Wenn aber sehr viele Menschen sich so verhalten, wird es schwieriger, und man kann in der Masse untertauchen.

TOR wird umso besserer und sicherer, je mehr Leute daran teilnehmen! Jeder kann sich so einen "Node" aufbauen und anderen Benutzern zur Verfügung stellen. Man braucht aber schon etwas Mut, um einen "Exit node" zu betreiben. Gerüchteweise betreiben auch Geheimdienste Exit nodes. Hier hätte man natürlich das Kind mit dem Bad ausgeschüttet. Zum Glück kann man als TOR-Benutzer einschränken, welche Exit nodes zulässig sind (z.B. kann man festlegen, dass keine Exit nodes in USA verwendet werden).

Ich finde es bezeichnend, wenn ein Massenmagazin wie der Spiegel eine Anleitung veröffentlicht, aus einem Raspberry PI (einem Linux-Mini-PC) einen TOR-Router mit WLAN zu bauen und einzurichten.

VPN

Ein ähnliches Prinzip wie TOR, aber nur einstufig, erreicht man dadurch, dass man einen eigenen Server im Internet mietet und dort ein VPN ("virtual private network") einrichtet. Auf dem eigenen PC surft man dann nicht direkt im Internet, sondern sendet alle Anfragen zunächst an den gemieteten Server. VPN arbeiten prinzipiell verschlüsselt, so dass also niemand, der an der Leitung lauscht, Inhalte oder Ziele mithören kann. Der Server sollte natürlich bei einem vertrauenswürdigen Anbieter gemietet werden. Hier beißt sich jetzt zugegebenermaßen die Katze in den Schwanz: wem soll man vertrauen?

Cloud

Tja, das ist nun ein besonders schweres Problem: ich will Dateien zuverlässig ablegen, damit sie mir nicht verloren gehen, wenn zuhause ein Unglück geschieht (Festplattendefekt oder Brand, um nur mal zwei zu nennen). Andererseits sind die großen Cloud-Anbieter wie Google, Microsoft, Dropbox, Box, Amazon aufgrund der Datenmengen und des Standorts in USA sicherlich besonders attraktiv für das Ausforschen von Daten. Man sollte also nur verschlüsselte Daten dort ablegen. Dazu kann man entweder ein Tool verwenden, das sich in die Kommunikation mit der Cloud einklinkt (gibt es z.B. für Dropbox), oder man verschlüsselt zuhause manuell und lädt schon nur die verschlüsselten Dateien hoch. Die zweite Variante hat den Vorteil, dass man die Verschlüsselungsqualität frei wählen kann und nicht das Risiko eingeht, dass jemand eine Hintertür eingebaut hat.

Für diese Verschlüsselung kann man wiederum GPG verwenden (dasselbe Hilfswerkzeug, das auch in der verschlüsselten Email mit Thunderbird verwendet wird). Mit GPG kann man die Integrität von Dateien oder Nachrichten sicherstellen, indem man sie elektronisch signiert. Oder man kann sie verschlüsseln, damit nur der Besitzer der Schlüsseldatei und des dazugehörigen Passworts sie wieder entschlüsseln kann. Oder man kombiniert Signatur und Verschlüsselung.

Email

Email kann man mittlerweile leicht verschlüsseln. Thunderbird mit Enigmail nehmen, Gnu Privacy Guard dazuwerfen und schon kann man mit jedermann geschützt emailen, sogar mit wählbarer Verschlüsselungsqualität.

Kleine Einführung in Gnu Privacy Guard

Aber nur ganz klein, soweit es zur Benutzung nötig ist ;)
Die Schritte zur Benutzung von GPG sind recht übersichtlich:
(Edit bzw. Tools)->Account Settings

  1. GPG-Software beschaffen und installieren (für Windows, Linux, Mac)
  2. Erstellen eines eigenen Schlüssels
  3. Enigmail als Add-On für Thunderbird installieren
  4. In den Kontoeinstellungen für jedes eigene Emailkonto die Option "OpenPGP verwenden" ankreuzen.
  5. Benutzen
  6. OpenPGP verwenden und alles verschlüsseln
  7. Eigenen öffentlichen Schlüssel unter die Leute bringen (wenn man selbst verschlüsselte Mails bekommen will)
Grade eben hab ich auch noch ein Video gefunden, das auch alles sehr schön erklärt.

Noch ein paar Details zum 2. Punkt:

Nachdem man GPG installiert hat, muss man sich selbst einen sog. "Schlüssel" erstellen. Dieser Schlüssel wird nach einem mathematischen Verfahren ausgerechnet (im Prinzip ist das nur eine sehr große Zahl) und in einer Datei gespeichert. Es gibt verschiedene mathematische Verfahren, manche basieren auf Primzahlen, manche auf geometrischen Prinzipien über elliptische Kurven, und man kann über die Anzahl der "Bits" die Qualität einstellen. Je mehr Bits, desto besser, allerdings dauert dann auch die Verschlüsselung etwas länger. Ich empfehle, 2048 Bit einzustellen. Man kann auch 3072 wählen, um die NSA zu ärgern ;).

Wenn man sich selbst einen Schlüssel erstellt, erhält man kostenlos sogar noch etwas obendrauf: nicht nur einen "privaten" Schlüssel, sondern auch einen "öffentlichen". Die beiden Teile gehören mathematisch zusammen. Allerdings ist die Mathematik dabei so aufwändig, dass es nicht möglich ist, aus dem "öffentlichen" Schlüssel den privaten (oder: geheimen) zu bestimmen, und man kann auch nicht nach der Verschlüsselung mit demselben Schlüssel die Nachricht wieder lesbar machen. Die Entschlüsselung klappt nur mit dem privaten Schlüssel. Interessanterweise benötigt man eigentlich nur den privaten Schlüssel, denn aus dem kann man den öffentlichen Teil berechnen (aber nicht umgekehrt, wie schon gesagt!).

Diese Schlüsseldatei und den Zugang dazu muss man besonders gut schützen, dies repräsentiert die eigene digitale Identität, wenn man sich auf das "Signieren" und Verschlüsseln einlässt, um Nachrichten mit Partnern auszutauschen. Das Schützen kann man erreichen, indem diese Datei auf einem USB-Stick gespeichert wird und der nur eingesteckt wird, wenn die Datei mit dem Schlüssel wirklich gebraucht wird. Außerdem wird die Schlüsseldatei mit einem möglichst guten Passwort geschützt (bei GPG nennt man das Passphrase, um zu betonen, dass es auch ein längerer Satz statt eines einzelnen Worts sein kann). Der übliche Satz "Mein Vater erklärt mir jeden Sonntag unsere neun Planeten" ist abgelutscht, weil ihn jeder kennt, und zudem ist er astronomisch falsch, seit Pluto zu einem "Zwergplaneten" degradiert wurde ;)

Das Tolle an dieser sogenannten "asymmetrischen" Verschlüsselung ist, dass sie aus zwei Teilen besteht, wie der Name schon vermuten lässt: für Ver- und Entschlüsselung benötigt man zwei verschiedene Dateien bzw. Schlüssel. Weiter oben habe ich es schon erwähnt: man verschlüsselt mit dem öffentlichen Schlüssel, und man entschlüsselt mit seinem privaten Schlüssel. Deshalb nennt man dieses Verfahren auch "public/private key encryption".

Das ist ein ganz geniales Prinzip: der öffentliche Schlüssel kann beliebig in die Welt hinausgepustet werden, man kann ihn jedem seiner Mailpartner geben, und selbst wenn jemand die verschlüsselte Nachricht abfängt, kann er sie mit dem öffentlichen Schlüssel nicht wieder entschlüsseln. Das kann nur ich allein mit dem persönlichen, privaten Schlüssel.

Das Grundprinzip lautet also: ich brauche den öffentlichen Schlüssel meines Mailpartners, dann kann ich ihm vertrauliche Emails schicken. Nur er kann sie mit seinem privaten Schlüssel lesen.

Umgekehrt: wenn ich eine Email signieren will, um zu kennzeichnen, dass sie wirklich von mir ist, geht das nur, wenn ich diese Email mit meinem privaten Schlüssel bearbeite. Nur ich kann also diese Signatur erzeugen, weil ich Zugang zum privaten Schlüssel habe.

Wenn man beides machen will, verschlüsseln und signieren, verwendet man den öffentlichen Schlüssel des Partners zum Verschlüsseln und den eigenen privaten zum Signieren.

Da es natürlich mit zunehmender Anzahl von GPG-Benutzern unpraktisch wird, gibt es frei benutzbare Server im Internet, die eine Art Telefonbuch von öffentlichen Schlüsseln speichern ("Keyserver" oder "Schlüsselserver"). Der Schlüssel ist mit einer Emailadresse verbunden, und der Einreicher zeigt damit, dass er mit dieser Emailadresse verschlüsselte Email empfangen will und kann. Enigmail kann man so einstellen, dass prinzipiell jede Email verschlüsselt wird, und wenn der Schlüssel des Empfängers noch nicht bekannt ist, kann Enigmail ihn automatisch bei diversen Keyservern suchen.

Falls aber nun doch der private Schlüssel außer Kontrolle gerät, kann man ihn annullieren und das der Welt mitteilen: es gibt eine "revocation", und man sollte gleich einen neu erzeugten Schlüssel mitliefern.

Wer mehr über die mathematischen Grundlagen und die Konzepte von Integrität, Vertraulichkeit und Verlässlichkeit wissen will, kann dies übersichtlich in einem Buch von Kryptographie-Koryphäe Bruce Schneier tun (auch als ebook). Über Schneier gibt es ähnlich viele Scherze wie über Chuck Norris, aber zum wahren Genuss sollte man das o.g. Buch etwas eingehender studiert haben ;)