JUNe/OpenPGP
Aus RWTH Jabber
| | Dieser Artikel wird von den am Jabber University Network beteiligten Universitäten gemeinsam verwendet. Aus diesem Grund ist der Artikel allgemein gehalten und nicht spezifisch für eine bestimmte Universität. Dadurch sparen wir eine Menge Arbeit und können euch insgesamt eine umfangreichere Dokumentation bieten. |
Inhaltsverzeichnis |
[Bearbeiten] Was ist OpenPGP und wie funktioniert es?
Die Verwendung von OpenPGP ist nicht wirklich kompliziert, allerdings ist zur sicheren Verwendung ein gewisses Basiswissen erforderlich.
OpenPGP ist ein Internet-Standard um Daten verschlüsselt zu speichern und digitale Signaturen zu erzeugen. Der Jabber-Standard XEP-0027 spezifiziert die Benutzung von OpenPGP über Jabber. Alle Programme die sich an diesen Standard halten, sind untereinander kompatibel. Es werden nur die Nachrichten selbst verschlüsselt und nicht etwa das gesamte Datenpaket wie bei der SSL/TLS-Verschlüsselung. Dies hat den großen Vorteil, dass die Nachricht nicht am Server entschlüsselt werden muss (und kann). Nur der vorgesehene Empfänger der Nachricht kann diese wieder korrekt entschlüsseln. Der Nachteil ist das auf diese Weise andere die Nachricht begleitende Daten (Ziel der Nachricht, Online-Status, ...) unverschlüsselt übertragen werden. Es ist aber kein Problem OpenPGP mit der SSL/TLS-Verschlüsselung zu kombinieren um dieses Problem zu umgehen.
OpenPGP verwendet ein PublicKey-Verfahren. Das bedeutet es gibt zwei Schlüssel: einen privaten (geheimen) Schlüssel und einen öffentlichen Schlüssel. Der öffentliche Schlüssel ist für jedermann frei zugänglich. Man kann ihn zum Beispiel auf der eigenen Website oder einem öffentlichen Schlüssel-Server hochladen. Der private Schlüssel dagegen ist nur auf der eigenen Festplatte gespeichert. Mit dem öffentlichen Schlüssel können nun Daten, z.B. eine E-Mail, verschlüsselt werden. Ein entschlüsseln der E-Mail ist dann nur noch mit dem privaten Schlüssel möglich. Somit kann uns also jedermann verschlüsselte Daten schicken, die nur wir selbst lesen können.
Die ganze Sicherheit des Verfahrens hängt von der Korrektheit der Schlüssel ab. Sollte es ein Angreifer schaffen, uns einen anderen (nämlich seinen eigenen) öffentlichen Schlüssel unter zu schieben, so kann er unseren Nachrichtenverkehr unbemerkt mithören. Mit dem öffentlichen Schlüssel des eigentlichen Empfängers kann der Angreifer nach dem Lesen die Nachricht (möglicherweise verändert) wieder verschlüsseln und an den Empfänger weiterschicken. Da die Nachricht wie erwartet eintrifft, bleibt der Mithörer unbemerkt. Um also sicher zu stellen, dass man auch den richtigen öffentlichen Schlüssel benutzt, sollte man unbedingt den Fingerabdruck (fingerprint) des Schlüssels, eine Art Hashwert, überprüfen. Dies sollte zumindest auf einem anderen Kommunikationsweg (Telefon) oder besser bei einem persönlichen Treffen geschehen. Die Mathematik hinter dem Public-Key-Verfahren lernt man in einer (Linearen-)Algebra-Vorlesung. Alternativ kann man sich das ganze auch z.B. bei Wikipedia ansehen.
Eine Alternative zu OpenPGP ist das speziell für Instant-Messaging entwickelte Off-the-Record Messaging (OTR).
[Bearbeiten] Eigenschaften
- Verschlüsselung (Encryption): Niemand kann die Nachrichten mitlesen.
- keine Beglaubigung (Authentication): Man kann sich zwar sicher sein, dass der Empfänger derjenige ist, für den man ihn hält. Umgekehrt kann man sich während eines Gespräches aber nicht gewiss sein, dass die empfangenen Nachrichten authentisch und unverändert sind. OpenPGP unterstützt z.B. in Emails gleichzeitige Verschlüsselung und Signatur, jedoch der XEP-0027 Standard für Jabber nicht. [1]
- Abstreitbarkeit (Deniability): Verschlüsselte Nachrichten enthalten keine elektronische Signatur. Es ist also möglich, dass jemand Nachrichten nach einer Konversation so fälscht, dass sie von einem selbst zu stammen scheinen.
- keine Folgenlosigkeit (no Perfect Forward Secrecy): Wenn man seinen privaten Schlüssel verloren hat sind möglicherweise alle mit diesem Schlüssel getätigten Gespräche kompromittiert.
- OpenPGP für Jabber ist in XEP-0027 standardisiert. Auch wenn es OpenPGP-Standards für andere Netzwerke gibt, ist XEP-0027 zu diesen nicht kompatibel.
- XEP-0027 kann nicht feststellen, ob der Empfänger einer Nachricht dies unterstützt. [2]
[Bearbeiten] GnuPG
Der GNU Privacy Guard ist ein Programm welches dem OpenPGP-Standard entspricht. Hier können sowohl Schlüssel erzeugt und verwaltet werden, als auch Daten verschlüsselt oder entschlüsselt. GnuPG gibt es für die meisten Platformen. Wer ungern in der Konsole arbeitet, der wird sicherlich ein grafisches Frontend für GnuPG bevorzugen. Mit diesem fällt das hantieren mit Schlüsseln wesentlich leichter. Wer z.B. KDE unter Linux einsetzt, der hat das Tool KGpg installiert. Mit diesem lassen sich sehr bequem Schlüssel erstellen und verwalten.
Unter Windows muss man leider zuerst GnuPG selbst installieren (GnuPG für Windows) und sich dann ein geeignetes Frontend suchen, beispielsweise WinPT, es gibt aber auch andere. Für andere Platformen gibt es sicherlich ähnliche Frontends.
Generelle Hinweise:
- Veröffentliche NIEMALS deinen privaten Schlüssel und speichere ihn NIEMALS auf unsicheren Medien.
- Wähle eine sichere Passphrase. Mit diesem Passwort wird der Schlüssel auf der Festplatte des Rechners verschlüsselt gespeichert. Hier sollte durchaus ein langes und starkes Passwort gewählt werden, etwa YkW2D9Wg3xeC.
- Man sollte ebenfalls bedenken, dass man diese Passphrase häufig eingeben muss, nämlich immer dann, wenn ein Programm den Schlüssel verwenden will. Meist wird die Passphrase beim Programmstart einmal abgefragt und dann im Arbeitsspeicher behalten.
- Speichere deine Passphrase NIEMALS als Klartext auf deiner Festplatte. Wenn du deine Passphrase beispielsweise in deinem Jabber-Client speicherst passiert genau das! Das ist dann genauso sicher (oder eher unsicher) wie ganz ohne Passphrase.
[Bearbeiten] KGpg
Zunächst einmal muss man sich einen eigenen, privaten Schlüssel erstellen. Dies geht unter 'Schlüssel' -> 'Schlüsselpaar generieren...'. Die Informationen wie Name, EMail und Kommentar werden im Schlüssel gespeichert und dienen dazu den Schlüssel später jemandem zuordnen zu können. Die Gültigkeitsdauer sollte so gewählt werden, dass der Schlüssel ungültig wird sobald es (theoretisch) möglich wäre das der Schlüssel geknackt ist. Mit einem Großrechner lässt sich ein Schlüssel, natürlich abhängig von der Länge des Schlüssels, (theoretisch) in wenigen Jahren knacken. Im nächsten Feld lässt sich die Schlüssellänge einstellen. Je länger der Schlüssel, desto sicherer ist er natürlich. Jedoch steigt logischerweise auch die benötigte Rechenzeit zum ver- und entschlüsseln. Für heutige Rechner ist aber auch ein 4096er Schlüssel kein Problem.
Ein Klick auf 'Ok' führt zum nächsten Fenster. Hier wird die Passphrase gewählt. Bitte obige Generelle Hinweise beachten.
Nun wird der Schlüssel erstellt. Je nach Schlüssellänge und Rechner kann das durchaus einige Minuten dauern. Nach dem erzeugen kann man seinen neuen öffentlichen Schlüssel veröffentlichen. Dies geht bequem über 'Schlüssel' -> 'Öffentliche Schlüssel exportieren...'. ACHTUNG: Nicht den privaten Schlüssel exportieren!
Über 'Schlüssel' -> 'Schlüssel importieren' kann man Schlüssel aus der Zwischenablage oder einer Datei importieren. Mit KGpg ist es auch möglich Schlüssel von einem Schlüsselserver zu importieren. Dazu 'Datei' -> 'Schlüsselserver' wählen.
[Bearbeiten] WinPT
WinPT ist ein einfaches GnuPG-Frontend für Windows. Nach dem Start verschwindet es zunächst einmal im SysTray. Ein Doppelklick startet den Key Manager.
Sofern man noch keinen eigenen private Key hat sollte man alles erstes einen erzeugen. Dies geht unter Key -> New -> Expert.
Als Schlüsseltyp reicht uns die Standardeinstellung DSA and ELG, die Schlüssellänge sollte man aber auf 4096 stellen. Je länger der Schlüssel desto sicherer. Heutige Rechner sind schnell genug um auch mit großen Schlüssel schnell um zu gehen. Die Generierung eines solchen Schlüssels kann zwar schon mal 10 Minuten in Anspruch nehmen, beim späteren Arbeiten mit dem Schlüssel fällt die Länge des Schlüssels jedoch zeitlich kaum ins Gewicht.
Als Gültigkeitsdauer sollte man 2-3 Jahre wählen, eine Zeit in der ein solcher Schlüssel (theoretisch) durchaus geknackt werden könnte. Entsprechend sollte man die Zeit kürzer wählen, falls man nur eine kurze Schlüssellänge gewählt hat.
Im nächsten Fenster muss man eine Passphrase eingeben. Bitte obige Generelle Hinweise beachten.
Den gerade erzeugten Schlüssel sollte man nun exportieren und beispielsweise auf der eigenen Website oder einem Schlüsselserver veröffentlichen. (Natürlich nur den öffentlichen Schlüssel!)
Um öffentliche Schlüssel in eine Datei zu exportieren die Schlüssel markieren und Key -> Export... wählen. Das importieren aus einer Datei funktioniert genauso, also Key -> Import....
Schlüsselserver vereinfachen den Austausch von Schlüsseln etwas. Mit der Suchfunktion kann man nach Namen oder Schlüssel-IDs suchen und sie so schnell und einfach importieren. Die großen Server sind übrigens untereinander verbunden, somit reicht es seinen Schlüssel auf einem Server zu veröffentlichen.
[Bearbeiten] Client konfigurieren
Die Programme Gajim, Kopete, Psi, Jabbin, JBother, Centericq und einige andere implementieren XEP-0027, den Jabber-Standard für OpenPGP und müssten somit zueinander kompatibel sein. Explizit getestet wurden in dieser Hinsicht von uns bisher jedoch nur Gajim, Kopete und Psi.
Die Konfiguration der Clients beschränkt sich im wesentlichen eigentlich nur darauf, dass man den eigenen privaten Schlüssel einstellt und den Chat-Kontakten ihre öffentlichen Schlüssel zuordnet.
Hinweise:
- Der XEP-0027-Standard funktioniert nur über das Jabber-Protokoll, d.h. z.B. nicht über Transports hinweg.
- Für Miranda gibt es das SecureIM Plugin welches zusammen mit der Crypto++ Bibliothek eine Jabber-konforme OpenPGP Verschlüsselung von Nachrichten und Chats erlaubt. Eine Kommunikation Psi <-> Miranda wurde erfolgreich getestet, allerdings ist das Plugin leider sehr langsam und somit nicht alltags tauglich. Vielleicht gibt es aber auch noch weitere XEP-0027-konforme Plugins. (Bitte ergänzen, wenn jemand etwas vernünftiges findet!)
- Bisher werden nur die Chat-Nachrichten selbst verschlüsselt. Andere Dinge, z.B. Status-Nachrichten, VCard usw. werden nicht verschlüsselt.
[Bearbeiten] Psi und Jabbin
Da Jabbin ein Ableger von Psi ist, daher dürfte auch die Konfiguration identisch sein. Im folgenden ist der Einfachheit halber nur noch von Psi die Rede.
Psi unterstützt die OpenPGP-Verschlüsselung von Haus aus. Daher ist die Konfiguration auch ziemlich leicht. Zunächst einmal müssen alle benötigten Schlüssel (also der öffentliche Schlüssel des Emfängers) in GnuPG importiert werden. Außerdem braucht man natürlich den eigenen privaten Schlüssel. Diesen stellt man als erstes ein. Dies geht unter Nutzerkonten -> (den Jabber-Account auswählen) -> Ändern -> Details -> Schlüssel auswählen.
Hinweis: Wurden neue Schlüssel importiert oder erzeugt braucht Psi manchmal einen Neustart um die neuen Schlüssel zu finden. Außerdem müssen Windows-Benutzer beachten, dass gpg.exe im Pfad stehen muss, damit Psi sie findet.
Im folgenden Fenster bekommt man dann eine Liste aller verfügbaren privaten Schlüssel. Sobald der Schlüssel eingestellt ist wird man zur Eingabe der Passpharse aufgefordet. Dies ist dieselbe die man auch bei der Erstellung des Schlüssels angegeben hat. Von nun an muss man bei jedem Neustart von Psi diese Passpharse eingeben. Der nächste Schritt ist die Zuordnung eines öffentlichen Schlüssel zu einem Gesprächspartner. Dazu klickt man einfach mit der rechten Maustaste auf den gewünschten Kontakt in der Kontaktliste und wählt OpenPGP-Schlüssel zuweisen.
Im folgenden Fenster wird nun der Schlüssel eingestellt. Konnte der richtige Schlüssel nicht automatisch ermittelt werden, kann man unter Schlüssel manuell auswählen einen öffentlichen Schlüssel aus der Liste auswählen.
Das war auch schon die ganze Konfiguration. Zum Ein-/Ausschalten der Verschlüsselung reicht ein einfach Klick auf das Schloß-Icon im Chat-Fenster. Der im Bild sichtbare Text Verschlüsselung eingeschaltet erscheint allerdings erst, wenn man dann auch eine Nachricht schreibt.
[Bearbeiten] Gajim
Als erstes stellt man den eigenen privaten Schlüssel ein. Dies geht unter Ändern -> Konten -> (den Jabber-Account auswählen) -> Ändern -> Persöhnliche Details... -> Schlüssel wählen....
An dieser Stelle ist es möglich die Passphrase zu speichern. Dabei sollte man jedoch bedenken, dass dies dann genauso sicher (oder eher unsicher) ist, als hätte man überhaupt keine Passphrase. Die Passphrase steht dann nämlich als Klartext irgendwo in der Gajim-Konfigurationsdatei. Speichert man die Passphrase nicht, so muss man sie bei jedem Start von Gajim eintippen.
Nun ordnet man dem Kontakt mit dem man verschlüsselt chatten möchte noch dessen öffentlichen Schlüssel zu.
Im Chat die Verschlüsselung aktivieren und es kann losgehen! Der im Bild sichtbare Text Verschlüsselung aktiviert erscheint, genau wie bei Psi und Jabbin erst dann, wenn man dann auch eine Nachricht schreibt.
[Bearbeiten] Kopete
Neben der SSL-Verschlüsselung bis zum Server kann man mit Kopete auch jede Nachricht mit einem eigenen Schlüssel verschlüsseln, den man z.B. auch zum Verschlüsseln von E-Mails oder Dateien verwendet.
KGpg sollte gestartet sein. Zunächst muss man in Kopete unter Einstellungen > Module einrichten das Kryptographie-Modul einschalten und den eigenen privaten PGP-Schlüssel auswählen. Dieser wird benötigt, um die mit dem öffentlichen Schlüssel verschlüsselten Nachrichten zu entschlüsseln. Nicht nach Passwort fragen muss deaktiviert sein.
Nun geht man zurück in die Kontaktliste und klickt das Photo des Kontaktes, dem man verschlüsselte Nachrichten schicken möchte mit Rechts an. Im Kontext-Menü wählt man Öffentlichen Schlüssel auswählen... aus und wählt den öffentlichen SChlüssel des anderen aus.
Nach einem Neustart fragt Kopete bei der ersten eingehenden verschlüsselten Nachricht nach dem Passwort, dass eingegeben werden muss, bevor man den eigenen privaten Schlüssel benutzen kann.
Der Chatpartner muss das selbe auf seiner Seite einstellen, um einem verschlüsselte Nachrichten schicken zu können. Kopete verschlüsselt nur Nachrichten an Kontakte, denen man einen öffentlichen Schlüssel zugewiesen hat. Man kann die Verschlüsselung im Chatfenster unter Extras auch ausstellen.
Probleme
- Wenn man ein Chatfenster offen hat, die Verschlüsselung ausschaltet und dann wieder an, werden die Nachrichten nicht entschlüsselt, bis man das Fenster schließt und neu öffnet.
- Bei KDE 3.5.6 verhindert derzeit ein Bug die sinnvolle Verwendung von OpenPGP mit Kopete.
[Bearbeiten] JBother
Hinweis: Sollte JBother den Pfad zur GnuPG-Anwendung nicht automatisch finden, so kann man diesen unter JBother-Menü -> Optionen -> Einstellungen -> Anwendungen einstellen. Bei unserem Test hat es jedoch auch ohne diese Einstellung funktioniert.
Auch bei JBother stellt man zuerst den eigenen privaten Schlüssel ein. Dies geht unter JBother-Menü -> Profile -> Nutzerkonto bearbeiten -> GnuPG -> Geheimen Schlüssel auswählen
Die Option Security Variant sollte man auf Encrypt only stellen, da andere Clients bisher leider noch keine OpenPGP-Signaturen unterstützen. Sign Presence kann man jedoch aktivieren, auch wenn noch nicht alle Clients dies unterstützen.
Die Möglichkeit die Passphrase zu speichern sollte man besser nicht benutzen. Man muss bedenken, dass dies dann genauso sicher (oder eher unsicher) ist, als hätte man überhaupt keine Passphrase. Die Passphrase steht dann nämlich als Klartext irgendwo in einer Konfigurationsdatei. Speichert man die Passphrase nicht, so muss man sie bei jedem Start von JBother eintippen.
Nun noch schnell den öffentlichen Schlüssel des Chat-Partners einstellen.
Und dann kann es losgehen. Die Verschlüsselung kann man mit einem klick auf das Schloss-Icon ein- und wieder ausschalten.















