Linux-Praxisbuch/ Das Kapitel GnuPG

Aus Wikibooks

Etwas Geschichte[Bearbeiten]

Das Original[Bearbeiten]

Phil Zimmermann schrieb die erste Version von PGP 1991. Sein Ziel war es, dass andere Atomkraftgegner sicher Nachrichten und Daten speichern konnten. Schon von der ersten Stunde an war PGP Open Source und konnte aus dem Usenet heruntergeladen werden.

PGP durfte in seinen Anfangsjahren nicht aus den USA exportiert werden, da es unter das US-Waffengesetz fiel. Danach unterliegen Kryptosysteme mit Schlüsseln von mehr als 40 Bit Länge den Exportbestimmungen. PGP lag mit 128 Bit weitaus höher. Durch die Verbreitung im Internet wurde Phil Zimmermann Ziel von Untersuchungen wegen unerlaubter Waffenexporte. Mitte der 90er Jahre liberalisierten die USA diese Gesetze.

Um die Exportbeschränkung zu umgehen, wurde die Version 5 als Quellcode in Form eines Buches aus den USA legal exportiert und von einigen Freiwilligen per Hand eingescannt. Aus dem gescannten Programmcode wurde dann eine international verfügbare Version von PGP (PGPi) kompiliert.

Es existiert eine kommerzielle Version von PGP, welche von der Firma PGP Corporation vertrieben wird. Für privaten Gebrauch gab es von der Version 8.1 noch eine kostenlose Version.

OpenPGP[Bearbeiten]

Entstanden ist OpenPGP im Jahr 1998 als Reaktion auf diverse Entwicklungen:

  • die in PGP verwendeten Algorithmen (IDEA und RSA) waren patentiert und konnten nicht beliebig verwendet werden. Insbesondere gab es in den USA Gesetze, die den Export von starker Verschlüsselung (>40 Bit) verboten.
  • das Programm PGP wurde kommerziell durch die Firma PGP Inc. vertrieben und es gab (falsche!) Gerüchte, dass eine Hintertür in dem Programm eingebaut wäre, da es über eine sogenannte ADK-Funktion (Additional Decryption Key) verfügte (s.o.).
  • Ende 1997 wurde PGP Inc. von "Network Associates Inc." (NAI) übernommen, die Mitglied der "Key Recovery Alliance" waren.

Aufgrund der Tatsache, dass der Quelltext von PGP zeitweilig nicht offengelegt wurde und Features implementiert wurden, welche die automatische Verschlüsselung an einen weiteren Empfänger ermöglichten, wurde bis 1998 der OpenPGP-Standard entwickelt und im RFC 2440 festgeschrieben. Das Dokument beschreibt das Datenformat um Informationen verschlüsselt zu speichern und digitale Signaturen zu erzeugen. Ferner wird das Format von Schlüsseln (eigentlich Zertifikat) festgelegt.

Das unter der GNU-GPL stehende Programm GnuPG war ursprünglich die erste Implementation von OpenPGP und wurde als freie Alternative zu PGP entwickelt. Die Entwicklung von GnuPG wurde vom Bundesministerium für Wirtschaft und Arbeit (BMWA) und Bundesministerium für Inneres (BMI) im Rahmen der Aktion „Sicherheit im Internet“ unterstützt, um eine frei verfügbare Verschlüsselungssoftware für jedermann zur Verfügung zu stellen. Da der Quellcode jedermann offen steht, hat GnuPG gegenüber dem nicht vollständig offenen PGP deutliche Vorteile, z.B. kann überprüft werden, dass man durch GnuPG selbst nicht ausspioniert wird.

Mittlerweile folgt auch PGP dem OpenPGP-Standard fast vollständig, sodass es kaum noch zu Problemen beim Austausch von Daten kommt. Es gibt ferner die OpenPGP Alliance als Zusammenschluß mehrerer Hersteller, die sich dem OpenPGP-Format verpflichtet fühlen. Allerdings ist die entsprechende Webseite seit ca. 2001 nicht mehr aktualisiert worden.

Verwendete Verfahren[Bearbeiten]

Benutzt wird das sog. Public Key-Verfahren, d.h. es gibt ein eindeutig zugeordnetes Schlüsselpaar: Einen öffentlichen, mit dem jeder die Daten für den Empfänger verschlüsseln kann und einen geheimen privaten Schlüssel, den nur der Empfänger besitzt und der durch ein Kennwort geschützt ist. Nachrichten an einen Empfänger werden mit seinem öffentlichen Schlüssel codiert und können dann nur durch den privaten Schlüssel des Empfängers geöffnet werden. Diese Verfahren werden auch asymmetrische Verfahren genannt, da Sender und Empfänger zwei unterschiedliche Schlüssel verwenden.

Die erste Version wurde 1991 geschrieben und verwendete einen RSA-Algorithmus zur Verschlüsselung der Daten. Spätere Versionen benutzten den DH/DSS-Algorithmus.

Bei PGP wird aber nicht die ganze Nachricht asymmetrisch verschlüsselt, denn dies wäre viel zu rechenintensiv. Stattdessen wird die eigentliche Nachricht symmetrisch und nur der verwendete Schlüssel asymmetrisch verschlüsselt (Hybride Verschlüsselung). Dazu wird jedes Mal ein symmetrischer Schlüssel zufällig erzeugt.

Dieser symmetrische Schlüssel wird dann per RSA- oder Elgamal-Kryptosystem mit dem öffentlichen Schlüssel des Empfängers verschlüsselt und der Nachricht hinzugefügt. Dadurch ist es möglich, eine Nachricht für mehrere Empfänger gleichzeitig zu verschlüsseln. Eine für mehrere Empfänger verschlüsselte Nachricht sieht dann folgendermaßen aus:

verschlüsselter Schlüssel für Empfänger 1
verschlüsselter Schlüssel für Empfänger n
symmetrisch

verschlüsselte

Nachricht

PGP basiert dabei auf dem sogenannten Web of Trust bei dem es keine zentrale Verifizierungs-Instanz gibt, sondern sogenannte Ketten des Vertrauens (s.u.).


In der Regel werden die erzeugten Daten per E-Mail über das Internet übertragen. Dies kann auf mehrere Arten geschehen:

  • Als binärer Anhang nach dem MIME-Standard(RFC 2045)
  • Als Base64-kodierter Text (ursprüngliches Text-Format von PGP auch PGP/INLINE genannt)
  • Als Multipurpose Internet Mail Extensions-Erweiterung nach RFC 3156

Zusammen mit S/MIME (welches X.509-Zertfikate verwendet) gehört der OpenPGP-Standard zu den wichtigsten Standards für E-Mail-Verschlüsselung.

Das ebenfalls weit verbreite S/MIME-Protokoll verwendete dagegen X.509-Zertifikate und ist deshalb grundsätzlich nicht kompatibel zu OpenPGP. Es existieren allerdings Applikationen, die bei OpenPGP-Schlüsseln im RSA-Format das Schlüssel-Material in X.509-Zertifikate umwandeln können.

Web Of Trust[Bearbeiten]

Mittels eines Web of Trust (Netz des Vertrauens) versucht PGP/GnuPG dem Problem zu begegnen, dass man sich persönlich meist nicht von der Echtheit der Schlüssel aller Kommunikationspartner versichern kann. Benutzer können andere Schlüssel mit ihrem eigenen Schlüssel signieren und bestätigen Dritten damit, dass sie sich von der Echtheit des Schlüssels überzeugt haben. Zudem kann man festlegen, wie sehr man den Signierungen der Person vertraut. Dadurch entsteht das beschriebene Vertrauensnetzwerk. Wenn Alice beispielsweise mit ihrer Signatur die Echtheit des Schlüssels von Bob bestätigt hat, kann Cloey der Echtheit des Schlüssels von Bob auch dann trauen, wenn sie selbst sich davon nicht direkt überzeugen konnte, weil sie ihn beispielsweise aus dem Internet bezogen hat. Voraussetzung dafür ist natürlich, dass sie den Schlüssel von Alice kennt und ihm vertraut. Es gibt einige sogenannte Certification Authorities (CA), die die Echtheit von Schlüsseln beispielsweise durch persönlichen Kontakt mit Überprüfung des Personalausweises feststellen. Kostenlos wird dies beispielsweise vom Deutschen Forschungsnetz und der Zeitschrift c't angeboten.

Grundlagen für Einsteiger[Bearbeiten]

Verschlüsselung[Bearbeiten]

Um Daten zu verschlüsseln, benötigt der Absender den öffentlichen Schlüssel des Empfängers. Da diese Verschlüsselung nur mit dem privaten Schlüssel wieder entschlüsselt werden kann, ist sichergestellt, dass die Daten nicht in falsche Hände geraten.

Signierung[Bearbeiten]

Neben der Verschlüsselung dient OpenPGP auch zur Signierung von Daten (elektronische Unterschrift), damit Empfänger ihre Echtheit und Unverfälschtheit feststellen können. Dazu wird vom Absender eine Prüfsumme (auch Hash-Wert genannt) der Daten gebildet, die dann mit dem privaten Schlüssel verschlüsselt wird (die Daten selbst bleiben unangetastet). Der Empfänger kann dies mit dem öffentlichen Schlüssel wieder entschlüsseln und die so sichtbar gemachte Absender-Prüfsumme mit der von ihm selbst nach dem gleichen Verfahren erstellten Prüfsumme der Daten vergleichen. Da niemand außer dem Besitzer des privaten Schlüssels (der Absender) die Prüfsumme so verschlüsseln kann, dass sie mit dem öffentlichen Schlüssel wieder korrekt entschlüsselt wird (vom Empfänger), ist sichergestellt, dass Daten und Prüfsumme nicht manipuliert werden können.

Schlüsselbeglaubigung[Bearbeiten]

Auch öffentliche Schlüssel können von anderen Schlüsselinhabern signiert werden, um die Echtheit eines Schlüssels zu untermauern. Im Gegensatz zu S/MIME basiert diese Signierung jedoch nicht auf einem hierarchischen System, bei der nur eine übergeordnete Stelle Schlüssel untergeordneter Stellen signieren darf, sondern aus einem Netzwerk von Freunden, in dem jeder andere Schlüssel signieren kann. Die bei der Signatur abgegebene Aussage über das Vertrauen in Schlüssel und Besitzer ermöglicht es Dritten, Rückschlüsse auf die Vertrauenswürdigkeit zu machen. Vertraut zum Beispiel Teilnehmer B Teilnehmer A, könnte B auch dem öffentlichen Schlüssel des ihm unbekannten Teilnehmers C vertrauen, wenn dieser Schlüssel durch A signiert wurde.

Eine weitere, einfache Methode, die Echtheit eines Schlüssels zu prüfen, ist der Vergleich des Fingerabdrucks (Fingerprint in neudeutsch). Dabei handelt es sich um eine Prüfsumme der Schlüsseldaten in Form einer Zahlen-/Buchstabenkolonne (zum Beispiel "72F0 5CA5 0D2B BA4D 8F86 E14C 38AA E0EB"), die sich leicht per Telefon oder Brief vergleichen lässt.

Weblinks[Bearbeiten]