[HowTo][Linux][Crypt] OpenPGP für u.a. E-Mails "from scratch" (mal wieder)

// UPDATE: ich wurde auf inhaltliche Fehler hingewiesen und habe diese hoffentlich nun komplett korrigiert. @Hauke Laging von http://www.crypto-fuer-alle.de vielen Dank für die Mail!

Nach über einem Jahr "stillschweigen" nun mal wieder ein (hoffentlich) interessanter Post. Diesmal zum Thema OpenPGP und wie man seine Mails damit verschlüsseln kann.
Wenn man nicht so ein Schussel ist wie meinereiner ( *double-facepalm* ), macht man - sofern man seine Keys sauber aufbewahrt - die kommenden Schritte in der Regel nur einmal.

Was muss man zum Thema OpenPGP wissen?

Im Gegensatz zur anderen weit verbreiteten Verschlüsselung "S/MIME" braucht man kein Zertifikat einer gesonderten externen Quelle wie z.B. Comodo oder StartSSL. Supi, denn in der Regel entgeht man damit fehlenden Bekanntmachungen zu Sicherheitsproblemen, die dann 6 Monate später - also wenn eh schon alle Infos abgegriffen worden sind - erst veröffentlich werden ;-)

Ein weiterer Grund der für OpenPGP spricht: revoken kann man selbst und das binnen weniger Minuten. Neue OpenPGP Schlüssel sind ebenfalls binnen Minuten erstellt und auf den PGP-Servern verteilt. OpenPGP stellt zudem ein "Web of Trust" dar - jeder kann andere *öffentliche* Schlüssel verifizieren und signieren.

Warum man - wenn man dazu Lust hat - den Mailinhalt trotz SSL-/TLS-Verkehr verschlüsseln sollte?

Ganz einfach: SSL- und TLS-Verkehrsverbindungen sind ja supi... Aber - nur theoretisch versteht sich - was ist wenn der Verkehr "hintendran", quasi von dem Mailmaster auf die Slaves, unverschlüsselt passiert oder es einen bzw. gar mehrere Eindringlinge im Netzwerk des Mailanbieters gibt und diese dann auf den Mailslaves eure Mails in Plaintext lesen können? Schön, oder?

Und warum macht das dann nicht jeder?

Nicht jeder ruft seine Mails via eigenem Mail Client oder gar fetchmail vom POP3 eines Freemail-Providers ab, ergo werden die Webinterfaces der Anbieter verwendet, welche - zum Teil - keine Möglichkeit anbieten OpenPGP einzubinden. Es soll zwar Mittel und Wege geben dies z.B. via Browser-Plugin zu tun, jedoch sind mir diese Suspekt... Wer weiß da schon wer in der Leitung "mitliest"?

Was muss man tun um OpenPGP zu benutzen?

Das schöne ist: gar nicht mal so viel Unter Linux reicht die Installation von gpg2 über den Paketmanager der Distribution um mit OpenPGP zu starten. Zu den einzelnen Befehlen später mehr...
Anmerkung: scheint wohl bei vielen Distributionen bereits mitgeliefert zu werden

Hä? Buzzword-Jungle: OpenPGP und GPG?

Ja, PGP == Pretty good privacy; GPG == Gnu Privacy Guard. Also OpenPGP ist "das Verfahren", GPG ist "das Toolset das PGP umsetzt" - noch Fragen?

Key erstellen

        gpg2 --gen-key

Beim Generieren werden einem immer "lustige Zwischenfragen" gestellt - wenn man keine Ahnung hat was von einem verlangt wird oder es gerade 2:33 Uhr nachts ist und die Augen ganz schmal sind: einfach Enter drücken ;)

Gefragt werden u.a. Art des Keys (RSA & RSA, DSA & Elgamal, etc.), Bitlänge des Keys (nach belieben), Gültigkeit des Keys (unendlich, Tage/Wochen/Monate/Jahre), Name, E-Mail, Kommentar, Passwort (sehr wichtig - bitte merken)

Sollte man mit allem fertig sein (und genug Bits im Puffer gehabt haben) kommt in etwa folgende Ausgabe:

        gpg: checking the trustdb
        gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
        gpg: depth: 0  valid:   3  signed:   0  trust: 0-, 0q, 0n, 0m, 0f, 3u
        pub   4096R/XXXXXX 2014-06-15
        Key fingerprint = AAAA BBBB CCCC DDDD EEEE  FFFF 0000 1111 2222 3333
        uid                  MyTest Name (blubb) <foo@bar.baz>
        sub   4096R/YYYYYY 2014-06-15

Glückwunsch, der Key ist erstellt. Aber der Publickey liegt noch lokal und muss auf die Key-Server von gnupg hochgeladen werden. Das geschieht wie folgt:

        gpg2 --keyserver keys.gnupg.net --send-keys XXXXXXXX

Hier bitte aufpassen, dass ihr auch nur den pub hochladet!
Anmerkung: es gibt natürlich auch noch andere Keyserver bei denen ihr euren Publickey hochladen könnt. Als Tipp von Hauke Laging: eu.pool.sks-keyservers.net

Revoke-Zertifikat erstellen

Falls der Key kompromittiert wurde, kann man mit einem "Revocation-Certificate" den eigenen Key ungültig erklären. Ein solches Zertifikat erstellt man wie folgt:

        gpg2 --gen-revoke XXXXXXX > revoke-da-key.key

Ohne dieses "Revocation-Certificate" wird der Key nicht als ungültig erklärt. Sofern der Privatekey und die Passphrase eurem "bösen Klon" vorliegt kann dieser dann lustig mit eurem bis dato guten Namen unterzeichnen, signieren und Dateien ver- wie entschlüsseln. Da man das in der Regel nicht will sollte man die 2 Minuten investieren.

Auch hier werden lustige Infos abgefragt z.B. Ob man das wirklich will, Warum wird das Zertifikat ungültig erklärt wird (nicht blenden lassen, das Zertifikat wird nicht bei der Generierung des Rev-Certs als ungültig erklärt), eine Beschreibung, Passwort (sonst könnte ja jeder der den Privatekey hat kommen und revoken)

Privaten Key prüfen

GPG erstellt einen Keyring ähnlich dem z.B. Gnome-Keyring für die GUI. Jedoch werden da nicht die Passwörter gespeichert sondern die einzelnen Privatekeys (secring.gpg) bzw. Publickeys (pubring.gpg) die mit GPG erstellt wurden. Um sich diese anzeigen zu lassen, muss man nur folgendes in der Shell absetzen:

        gpg2 --list-secret-keys

Als Output sollte dann sowas kommen:

        /home/huibuh/.gnupg/secring.gpg

        -------------------------------
        sec   4096R/XXXXXXXX 2014-06-15
        uid                  MyTest Name (blubb) <foo@bar.baz>
        ssb   4096R/YYYYYYYY 2014-06-15

Der einzige Test-Privatekey ;-)

Export für den privaten Heimtresor:

Wie bei allen privaten Schlüsseln (egal ob SSH, OpenSSL oder jetzt OpenPGP) sollte ein Backup an einem Ort existieren, dem man vertrauen kann. Das kann ein sonst nie benutzter USB-Stick sein, eine DVD, ausgedruckt im privaten Safe... Was einem so einfällt und sicher erscheint.

Um das Backup in digitaler Form anzulegen, benötigt man folgenden Befehl:

        gpg2 -ao openpgp-private.key --export-secret-keys XXXXXXXX

Wenn man auch noch ein Backup von seinem Publickey machen möchte geht das so:

        gpg2 -ao openpgp-public.key --export XXXXXXXX

Passwort vergessen, Safe geklaut, DVD geschreddert oder USB-Stick verloren?

Dann hat man ja noch das Revocation-Certificate was quasi nach dem Key direkt erstellt worden ist, oder? Gut!
Dann ganz einfach folgenden Befehl absetzen:

         gpg2 --import revoke-da-key.key

Somit ist der Key schonmal lokal als ungültig erklärt. Trotzdem könnt ihr noch Nachrichten damit (bedingt signieren, ver- und) entschlüsseln. Dass der Key ungültig ist sollte aber noch das "Web of Trust" wissen, daher ganz einfach folgendes absetzen:

       gpg2 --keyserver keys.gnupg.net --send-keys XXXXXXXX

Und nun weiß auch jeder im Verbund, dass man dem Key nicht mehr vertrauen kann.

Thunderbird einrichten

Thunderbird kann leider kein OpenPGP von sich, daher muss das Addon "Enigmail" installiert werden. Sobald das geschehen ist, muss Thunderbird einmal neugestartet werden und dann hat man schon einen neuen Button in der Menü-Leiste (sofern eingeblendet).

Dort den Menüpunkt "OpenPGP" -> "Schlüssel verwalten" -> "Datei" -> "Importieren" und dort dann den Privatekey hinzufügen. Dann sollte man direkt nach dem Passwort für den Schlüssel gefragt werden.

Die erste Mail

Noch kann man nicht verschlüsseln, sofern man nicht die Publikkeys seiner Gesprächspartner hat zwischengespeichert hat. Daher bietet es sich an, erstmal eine signierte Mail (ggf. mit Publickey ID in der Nachricht) zu versenden.

Dafür wie gewohnt einen Adressat auswählen, ein Subject schreiben, einen kurzen Bodytext und vor dem senden auf den Button "OpenPGP" im "Verfassen"-Fenster klicken. Dort gibt es dann 2 wichtige Optionen: "Nachricht unterschreiben" und "Nachricht verschlüsseln". Bei der ersten Mail einfach "Nachricht unterschreiben" auswählen und die Mail absenden.

Wenn euer Gegenüber ebenfalls OpenPGP nutzt wird er die Mail verschlüsselt zurücksenden und die erste verschlüsselte Mail wäre geschafft.

Falls nicht: versucht weitere Kontakte zu OpenPGP zu bringen ;-)