PGP - GPG

***Gastbeitrag***

Hintergrund


Phil Zimmermann, ein amerikanischer Softwareentwickler, veröffentlichte 1991 die erste
Version von PGP, Pretty Good Privacy.
Anstoß war ein damals ein kleiner Teilpunkt eines vorgeschlagens US Gesetz, welcher
Backdoors für die US Regierung in sämtlichen Verschlüsslungstools vorsah. Da Zimmermann
sein Augenmerk auf die einfache Nutzung für Bürger auf handelsüblichen Rechnern lag,
veröffentlichte er die erste Version auf einem öffentlichen FTP-Server, was noch gerichtliche
Konsequenzen haben sollte. Problem war, dass sämtliche Verschlüsselungssoftware zum
Export eine Lizenz vom State Department brauchte, und in viele Länder überhaupt nicht
exportiert werden durfte. Dies stammt aus der Zeit des kalten Krieges, als Verschlüsselung
ein militärisch strategischer Vorteil gegenüber dem Gegner war. Aus Protest veröffentlichte
Zimmermann den Source Code abgedruckt in einem Buch, was rechtlich keine Software
darstellt. Daraufhin verklagte ihn die US Regierung, wobei er jedoch siegte durch den Verweis
auf den Schutz des Buchexportes welches durch den 1. Zusatzartikel zur Verfassung der
USA abgedeckt ist. Dies hatte weitere positive Auswirkungen in den späten 1990ern und
2000ern auf die Bestimmungen zum Export von Kryptographie in den USA.
Zimmermann hat ein Zeichen gesetzt und ein Verschlüsselungswerkzeug erschaffen, für den
Schutz der freien Meinungsäußerung, sei es für politisch Verfolgte, Rebellen oder die, die es
werden wollen. Für seinen Einsatz hat er bereits etliche Auszeichnungen erhalten. So ist er
zum Beispiel Mitglied im Internet Hall of Fame.
Die ehemalige PGP Inc. gehört mittlerweile zu Symantec und bietet Softwarelösungen für den
professionellen Gebrauch an, wie z.B. den Symantec Encryption Desktop oder Symantec
Encryption Management Server.
1998 kam es zur Veröffentlichung von OpenPGP, einem IETF Standard, durch welchen
Programme nun frei von Lizenzkosten, eine erweiterte Version von PGP nutzen konnten.
GPG, oder GNU Privacy Guard, wurde erstmals 1997, von Werner Koch veröffentlicht, mit der
teilweisen Unterstützung vom deutschen BMWi. GPG unterstützt den OpenPGP Standard,
sowie mittlerweile den S/MIME (Secure/Mutlipurpose Internet Mail Extensions) Standard. Im
Unterschied zu PGP, unterstützt das GPL lizenzierte GnuPG nur patent-freie Algorithmen.
GPG eignet sich vor allem für private Nutzer, aber auch für Firmen die ein angepasstes PGP
brauchen, unter der Einhaltung der GPL Lizenz.
Der Name Pretty Good Privacy ist inspiriert vom fiktionalen Supermarkt Ralph's Pretty Good
Grocery einer Radiosendung.

Die verschiedenen Keys


Public Key


Der Public Key, der öffentliche Schlüsse einer Person dient dem Gesprächspartner
Nachrichten für diesen zu verschlüsseln und digitale Unterschriften zu prüfen. Diese Keys
findet man auf Schlüsselservern aufgelistet, dies kann ein Web of Trust oder PKI sein. Jeder
Public Key gilt für genau eine Person. Den Public Key kann man durch den Fingerprint
verifizieren. Zu diesem Key kann man außerdem ein Foto hinzufügen.

Private Key


Der Private Key wird genutzt, um Nachrichten zu entschlüsseln, die mit dem persönlichen
Public Key von einer anderen Person verschlüsselt wurde. Public und Private Key bilden also
eine Möglichkeit Nachrichten und Dateien asymmetrisch, also auch hybrid, zu kodieren.

Subkeys


Subkeys können für Public und Private Key, sowie nur zum signieren erstellt werden. Dies
ermöglicht es, das originale Public-Private Keypair auslagern zu können. Subkeys haben
normalerweise eine beschränkte Lebensdauer. Sie haben den Vorteil, dass im Falle eines
Subkey Klaues, ein neuer erstellt werden kann, und die Identität noch authentisch ist. Also
kein neuer Master/Private Key erstellt werden muss. Zum Erstellen von Subkeys wird der
Master/Private Key benötigt. Es können beliebig viele Subkeys erstellt werden, so
beispielsweise einen für jeden Rechner im Gebrauch. Subkeys werden in der Regel mit
kürzeren Passphrases erstellt, eben wegen ihrer kürzeren Lebensdauer.

Master Key


Der Master Key wird benötigt zur kompletten Verwaltung von Subkeys, also zur Erstellung
und Widerrufung (revokation) von Subkeys. Geht der Master Key verloren oder wird er
gestohlen, muss eine neue Identität erstellt werden. Sämtliche mit ihm assozierte Subkeys
sind dann auch nutzlos.
In der Praxis sollte nur mit Subkeys gearbeitet werden, und der Master Key an einem
sicheren Ort aufbewahrt werden, für den Fall, dass es Probleme mit Subkeys gibt.


GPG Einrichten


Zuerst holen wir uns das gpg Packet.
Unter Ubuntu: sudo apt-get install gnupg
Unter Arch Linux/Manjaro: sudo pacman -S gnupg

Wir fangen mit der Generierung des Key Pairs an. Dazu müssen wir unsere Identität
erstellen und persönliche Informationen angeben. Zuerst den Namen und die email-Adress,
später kann man noch einen Fingerabdruck oder Foto hinzufügen, um die Authenzität zu
erhöhen.
gpg --gen-key

Im nächsten Schritt möchten wir die Verschlüsselung und Komprimierung ändern. Dazu
lassen wir uns zuerst die Verschlüsselungs- und Komprimierungsmöglichkeiten anzeigen, mit
denen man dann den Private und Public Key verschlüsseln bzw. komprimieren kann :
gpg --version

Die Komprimierung ist wichtig, um Attacken zu erschweren, bei denen der Angreifer eine
verschlüsselte Nachricht modifiziert und verschickt, welche das Opfer dann falsch
entschlüsselt. Daraus kann der Angreifer möglicherweise die Nachricht entschlüsseln.
Nun gehen wir in den Editmodus mit gpg --edit-key und ändern die Verschlüsselung mit von
uns aus der vorigen Liste ausgewählten Algorithmen. Dafür nutzen wir den setpref Befehl im
edit Modus hinter den wir die gewünschte Verschlüsselung und Komprimierung angeben. Um uns zu versichern, dass diese Aktion gelungen ist, lassen wir uns die aktuelle Verschlüsslung anzeigen mit showpref.

Nun geht es darum einen Subkey zusätzlich zum existierenden Private Key zu erstellen mittels addkey.
Diesen signieren wir mit dem zu DSA stärkeren RSA. Daraufhin werden sämtliche Keys angezeigt. Erklärung der usage Flags:







ConstCharacter
PUBKEY_USAGE_SIGS
PUBKEY_USAGE_CERC
PUBKEY_USAGE_ENCE
PUBKEY_USAGE_AUTA

Mit dem ersten Key kann man demnach signieren und zertifizieren, mit dem zweiten nur
verschlüsseln, und mit dem dritten nur signieren.

Für den Fall, dass der Private oder Public Key gestohlen oder verloren wird, erstellen und exportieren wir ein Revocation Certificate. Dieses kann veröffentlicht werden um anderen mitzuteilen, dass der Public Key nicht mehr zum Verschlüsseln von Nachrichten benutzt werden soll. Wenn der Private Key nicht gestohlen wurde, können weiterhin erhaltene Dateien entschlüsselt werden.
gpg --output \<your@email.com\>.gpg-revocation-certificate
--gen-revoke your@email.com


Zur Trennung des Masters Keys vom aktiven Rechner, und dementsprechenden aktiven Einbindung des Subkeys, müssen wir zuerst Private Key, Public Key und alle Subkeys in Dateien exportieren :
gpg --export-secret-keys --armor your@email.com
> \<your@email.com\>.private.gpg-key
gpg --export --armor your@email.com
> \<your@email.com\>.public.gpg-key
gpg --export-secret-subkeys your@email.com > subkeys


Nun gilt es diese Keys irgendwo sicher aufzubewahren, dabei keinesfalls auf dem gerade benutzten Computer. Am besten auf einem sicher aufbewahrten USB Stick, welcher nur diesem Zweck dienen sollte.

Jetzt wird der (noch aktive) originale Master/Private Key aus unserem Keyring gelöscht :
gpg --delete-secret-key your@email.com

Zum Schluss den Subkey reimportieren und sämtliche temporäre Dateien sicher aufräumen :
gpg --import subkeys
shred --remove subkeys

Shred löscht die Dateien dabei nicht einfach, sondern überschreibt den Speicherplatz. Zur Versicherung unsere Aktionen lassen wir uns alle Keys anzeigen :
gpg --list-secret-keys

Die Raute hinter sec gibt nun an, dass der signierende SubKey nicht im Keypair des Keyrings
ist. Der Export des Master/Private Key war also erfolgreich.

Asymmetrische Verschlüsselung


gpg –encrypt TextExample.txt –recipient Alice
Optional mit –armor, um eine .asc Datei zu erstellen, welche man mit dem type Befehl und dem Dateinamen, in seiner ASCII Form ansehen kann.
Bei diesem gebräuchlichen Verfahren benutzt man den Public Key des Empfängers zum Verschlüsseln. Diese Datei kann dann auch nur mit dem Private Key dieses Empfängers entschlüsselt werden.
Möchte man mehreren Personen die gleiche Datei schicken, kann man dies durch einfaches einfügen eines weiteren Empfängers (recipient) tun:
gpg --encrypt --recipient Alice --recipient bam@example.com TextExample.txt

Symmetrische Verschlüsselung


Bei der symmetrischen Verschlüsselung, wird die Datei mit dem gleichen Key ver- und entschlüsselt. Dies eignet sich für Dateien, die man nicht an andere Personen verschicken möchte, wo man üblicherweise asymmetrisch verschlüsselt.

gpg --symmetric TextExample.txt
gpg --decrypt TextExample.txt.gpg