6. März 2015

EC-Kryptographie für den Privatmann?

Hintergrund von ECC-Verschlüsselung

Wir beschäftigen uns in diesem Artikel mit Elliptische Kurven Kryptographie, und keine Sorge es wird nicht zu mathematisch. Aber zunächst, warum benötigen wir überhaupt ECC (Elliptic Curve Cryptography)?

Nun, aufgrund von höherer Rechenleistung wird es im Bereich klassischer Kryptographie immer wichtiger lange RSA-Schlüssel zu benutzen, aber hierdurch wird die Performance (insbesondere auf mobilen Endgeräten) immer schlechter, sodass man nach Alternativen sucht. ECC ist hier eine Lösung, mit kürzeren Schlüsseln lässt sich ein vergleichbar hohes Sicherheitsniveau erreichen.

Zudem sind die mathematischen Probleme hinter ECC anders als hinter RSA. Dies bedeutet, ECC ist ein Ersatzverfahren für RSA, wenn dieses vielleicht in der Zukunft gebrochen oder zumindest nicht mehr schwierig genug ist. Für weitere Details verweisen wir auf die Wikipedia.

Als Sicherheitsberater und Prüfer finden wir seit geraumer Zeit in Produkten und Installationen elliptische Kurven, das ist gut für Unternehmens- und Behördennetze. Aber was ist eigentlich mit uns Konsumenten? Werden wir auch auf das Post-RSA-Zeitalter vorbereitet? Oder haben wir dann alle ein Problem?

EC für HTTPS und E-Mail Verschlüsselung mit S/MIME und PGP

Im Rahmen von drei Beispielen, wurde von uns untersucht, ob die Verwendung von ECC zur Verschlüsselung für den Endanwender mit einfachen Mitteln zurzeit realisierbar ist. Dabei wird einerseits die Verschlüsselung von Webseiten und andererseits die sichere Kommunikation über E-Mail betrachtet. Trotz dem lauten Abgesang von PGP in den letzten Tagen, schauen wir uns die Möglichkeit von ECC (oder kurz EC) mit PGP an. Zudem prüfen wir die Möglichkeiten S/MIME zu nutzen.

Die folgenden Abschnitte beschreiben den Weg eines (technisch versierten) Endanwenders von der Recherche bis hin zum (funktionierenden?) System.

Verschlüsselter Webseitenzugriff unter Verwendung von elliptischen Kurven

Immer mehr Webserver erlauben ausschließlich das https-Protokoll, um auf die Inhalte einer Webseite zuzugreifen. Seit der Einführung von SSL basiert dies bei nahezu allen Webseiten auf dem RSA-Algorithmus. Unser Ziel ist es, eine Webseite mit TLS-Unterstützung aufzusetzen, und dabei ein auf elliptischen Kurven basierendes Schlüsselpaar zu nutzen.

Die Generierung eines TLS-Zertifikats ist direkt mit OpenSSL unter Linux durchzuführen. Der Elliptic Curve Digital Signature Algorithm (ECDSA) erlaubt dabei verschiedene Kurven zur Schlüsselgenerierung. Wir wählen als secp256k1-Kurve, welche beispielsweise auch bei der Bitcoin-Implementierung verwendet wurde. Nach der erfolgreichen Schlüsselgenerierung und Konfiguration unseres Apache-Servers zeigt der Firefox-Browser eine leicht verwirrende Fehlermeldung an:

bild1

Die Fehlermeldung weist auf ein Problem mit SSLv3 hin. Denn SSLv3 wird von unserem Server überhaupt nicht angeboten. Die erweiterte Information lässt aber darauf schließen, dass die im Test verwendete Kurve nicht unterstützt wird. Eine kurze Recherche zeigt, dass in den verbreiteten Browsern lediglich diese drei NIST-Kurven unterstützt werden: secp256r1, secp384r1 und secp521r1. Alle weiteren in OpenSSL angebotenen Kurven sind nicht einsetzbar.

Ein erster Erfolg: Durch die Verwendung der Kurve secp256r1 und nach dem Generieren eines neuen Schlüsselpaares kann unsere Webseite ohne Probleme mit einem aktuellen Browsern aufgerufen werden:

bild2

bild3

S/MIME unter Verwendung von elliptischen Kurven

Bei der E-Mail-Verschlüsselung mit S/MIME kommt standartmäßig auch wieder der asymmetrische Verschlüsselungs-Algorithmus RSA zum Einsatz. Eine kurze Recherche im Netz zum Einsatz von elliptischen Kurven in Verbindung mit S/MIME brachte leider keine hilfreichen Informationen. Da der S/MIME-Test mit dem verbreiteten E-Mail-Client Thunderbird durchgeführt wird, der ebenfalls von Mozilla stammt, wird auch wieder die secp256r1-Kurve verwendet.

S/MIME nutzt Zertifizierungsstellen (CA) zur Signierung der Zertifikate. Mit OpenSSL werden zuerst die benötigten Zertifikate erzeugt und anschließend werden diese mit unserer selbst erstellten CA signiert. Die Zertifikate und die CA können nun in die Mail-Clients importiert werden. Nach diesen Schritten kann das Versenden einer E-Mail getestet werden.

Beim Senden einer verschlüsselten Nachricht tritt in Thunderbird eine Fehlermeldung auf. Um zu überprüfen, ob die Vorgehensweise eventuell fehlerhaft war, gehen wir einen Schritt zurück und verwenden Zertifikate mit RSA 4096 anstatt mit EC. Der Versand von verschlüsselten Mails und das Entschlüsseln beim Empfänger ist nun sofort problemlos möglich, S/MIME mit RSA funktioniert wie gewünscht.

Eventuell müssen also Details beachtet werden, um ECDSA einzusetzen? Oder wird der Einsatz von elliptischen Kurven in Verbindung mit S/MIME von Thunderbird in Bezug auf elliptische Kurven schlichtweg (noch) nicht unterstützt?

bild4

Eine Fehlermeldung beschreibt, dass Probleme mit den Zertifikaten aufgetreten sind. Konkrete Hinweise oder Ansätze zur Lösung des Problems ergeben sich für den Endanwender leider nicht. Wir brechen den Test mit S/MIME hier ab, vermutlich sind wir noch ein paar Monate oder Jahre zu früh.

PGP unter Verwendung von elliptischen Kurven

Das Add-On „Enigmail“ für Thunderbird ermöglicht die Verwendung von PGP mittels GUI-Elementen. Das Add-On setzt auf das im Linux-Umfeld bekannte GnuPG, welches zurzeit in drei verschiedenen Versionen classic, modern und stable verfügbar ist. Version 2.1.2 GnuPG-modern unterstützt erweiterte Funktionen wie beispielsweise die Verwendung von elliptischer Kurven Kryptographie. Diese Version ist aber nicht in den Paketquellen aktueller GNU/Linux-Distributionen enthalten und muss unter Verwendung des Source-Codes selbst kompiliert werden. Wir nehmen uns die Zeit und kompilieren selbst.

In den Enigmail-Einstellungen lässt sich der Pfad von GnuPG auf die 2.1-Version abändern. Möglichkeiten für die Erstellung von Schlüsseln mit elliptischen Kurven sind leider noch nicht vorhanden. Manuell in der Konsole mit GnuPG erstellte Schlüssel können aber ohne Probleme verwendet werden.

Nachdem die öffentlichen Schlüssel der beiden Clients ausgetauscht sind, kann über Enigmail in Thunderbird eine Test-Mail erfolgreich verschlüsselt und beim Empfänger wieder entschlüsselt werden.

Relativ viel Aufwand für eine simple E-Mail-Verschlüsselung, Alltagstauglichkeit für den Endanwender sieht anders aus.

Da die Einrichtung doch etwas aufwändig war, beschreiben wir hinter dem Fazit in diesem Artikel, wie wir zum Erfolg gekommen sind.

Unser Fazit zum Stand heute

Was haben wir gelernt, können wir unsere Verwandten jetzt mit ECC ausstatten?

Die durchgeführten Tests zeigen, dass die Elliptische-Kurven-Kryptographie (ECC) den Weg zum Endanwender noch nicht vollständig gegangen sind. Die Implementierung in GnuPG ist zwar ein Schritt in die richtige Richtung, die Hürden, die ein Endanwender bei der Einrichtung zu bewältigen hat, sind aber so hoch, dass die Zahl der Nutzer vermutlich abzählbar bleibt. (Sind die GnuPG-Nutzer mit RSA nicht eigentlich auch noch abzählbar? Aber das ist ein anderes Thema…)

Der Bereich HTTPS zeigt aber, dass elliptischen Kurven heute schon massentauglich nutzbar sind. Die Realisierung von verschlüsselten Webseitenzugriffen mit EC ist ohne großen Mehraufwand im Vergleich zum RSA-Algorithmus, sowohl für den Webserver-Admin als auch den Nutzer. Der Nutzer muss einen aktuellen Browser verwenden. Aufgrund von ständigen Sicherheitslücken kann man dies auch generell empfehlen. Nicht mehr zeitgemäß erscheint aber, dass in den bekannten Browsern ausschließlich NIST Kurven implementiert sind. Deren Sicherheit wird von Kryptoexperten derzeit stark angezweifelt, da die NIST aufgrund der Nähe zur NSA auch viel Vertrauen in der letzten Zeit verloren hat. Hier sei auf den Skandal um den Zufallszahlengenerator Dual EC DRBG verwiesen. Hier ist zu hoffen, dass zeitnahe auch weitere Kurven wie die Brainpool-Kurven oder die Curve25519 in die Browser integriert werden. Bis dahin wird umstritten sein, ob der Einsatz von elliptischen Kurven für Webseitenbetreiber einen Gewinn an Sicherheit darstellt.

/mw, /sf, /mf

Anleitung: Installation von GnuPG und Thunderbird mit Enigmail für EC

Für unseren Testaufbau brauchen wir:

  • 2 Testsysteme (System01, System02) hier: Ubuntu-Desktop
  • E-Mail-Client (hier: Thunderbird 31.2)
  • 2 Mail-Accounts (hier: system01@example.org und system02@example.org )

Installation von GnuPG: Da Enigmail auf GnuPG aufsetzt, muss eine GnuPG-Version auf dem System installiert sein. Elliptische Kurven Kryptographie wird ab der modern-Version(2.1 – https://www.gnupg.org/download/) unterstützt. Diese ist nicht in den Paketquellen von Ubuntu verfügbar und muss daher selbst kompiliert werden.

Installation von Enigmail in Thunderbird:  Extras->Add-ons->Enigmail->Hinzufügen

Es kann ggfs. erforderlich sein, die Binary für GnuPG-modern unter Enigmail -> Einstellungen -> Allgemein -> Dateien und Verzeichnisse -> Anderer Pfad: /usr/local/bin/gpg2 manuell zu definieren.

Erstellung der PGP-Keys auf System01 und System02: Enigmail besitzt derzeit noch keine GUI-Elemente für die Erstellung von PGP-Keys unter Verwendung von ECC, daher werden diese manuell über die Konsole erstellt:

cd /usr/local/bin/
./gpg2 --expert --full-gen-key
(9) ECC and ECC
(2) NIST P-256
(0) key does not expire
Real name: system01
Email address: system01@example.org
(O)key

Die Passphrase, zum Schutz des privaten Schlüssels, kann zu Testzwecken ausgelassen werden. Das Erstellen der PGP-Keys kann einige Minuten in Anspruch nehmen.

Der vorherige Abschnitt ist analog auch auf System02 durchführen.

Unter Enigmail -> Schlüssel verwalten sollte nun der erstelle Key sichtbar sein. Thunderbird muss evtl. als root gestartet werden, um auf den generierten Schlüssel zugreifen zu können.

bild5

Verschlüsselte E-Mail zwischen den beiden Systemen verschicken

System01 – Versenden des öffentlichen Schlüssels: Verfassen (Shift-Klick – für  plain-text E-Mail) Empfänger: system02@example.org -> Enigmail -> Nachricht wird nicht unterschrieben -> Zwingend unterschreiben

Nun wird der erstellte PGP-Key dem E-Mail-Konto zugewiesen: Konfigurieren -> OpenPGP-Unterstützung (Enigmail) für diese Identität aktivieren -> Spezielle OpenPGP-Schlüsselkennung verwenden -> Schlüssel auswählen -> OK,

Enigmail -> Meinen öffentlichen Schlüssel anhängen, dann Senden

System02 – Versenden einer verschlüsselten Mail an System01: E-Mail öffnen -> .asc im Anhang öffnen und importieren, Anworten -> Enigmail -> Nachricht wird nicht verschlüsselt -> Zwingend verschlüsseln -> Konfigurieren -> OpenPGP-Unterstützung (Enigmail) für diese Identität aktivieren -> Spezielle OpenPGP-Schlüsselkennung verwenden -> Schlüssel auswählen -> OK

Enigmail -> Nachricht wird nicht unterschrieben -> Zwingend unterschreiben

Optionen -> E-Mail-Format -> Nur Reintext, dann Senden

System01 –Von Enigmail automatisch entschlüsselte E-Mail auf System02:

 bild6

System01 – E-Mail bei deaktiviertem Enigmail:

bild7