GNU Privacy Guard (GnuPG, GPG)

Vortragender
Thomas Waldmann
E-Mail
tw AT waldmann-edv DOT de
GPG Key-ID
4096R/9F88FB52FAF7B393
GPG Fingerprint
6D5B EF9A DD20 7580 5747 B70F 9F88 FB52 FAF7 B393
Bitte beachten
Dies ist lediglich ein Kurzvortrag und er enthält nur das Wichtigste, wie man GPG benutzt, in kürzester Form. Wer Grundlagen und mehr Infos möchte, siehe Links im letzten Abschnitt.

GnuPG-Features

Hinweis zur ID-Länge

Immer lange IDs (64bit, 16 hex digits) oder den gesamten Fingerprint verwenden, bei kurzen IDs (32bit, 8 hex digits) besteht reale Verwechslungsgefahr, siehe https://evil32.com/.

Daher in ~/.gnupg/gpg.conf eintragen:

keyid-format long

Der evil32-Angriff ist nicht theoretischer Natur, ich durfte das soeben am eigenen Schluessel erleben. :(

Im folgenden How-To stehen noch die kurzen IDs drin, bitte entsprechend umdenken!

Primary-Keypaar erzeugen

/!\ Man sollte dies auf einem vertrauenswürdigen Rechner / Betriebssystem machen! KNOPPIX-CD o.ä.!?

gpg --gen-key

Dieses Kommando ist interaktiv, hier nur die Antworten (Hinweise in Klammern):

Ausgabe:

gpg: key EE1E26A4 marked as ultimately trusted
public and secret key created and signed.
...
pub   4096R/EE1E26A4 2010-01-15 [expires: 2020-01-13]
      Key fingerprint = 6C41 2257 A092 473B 36BB  B80F 8469 5389 EE1E 26A4
uid                  Thomas Waldmann <tw@waldmann-edv.de>

Note that this key cannot be used for encryption.  You may want to use
the command "--edit-key" to generate a subkey for this purpose.

Sub-Key zum Verschlüsseln

gpg --edit-key EE1E26A4
> addkey

Antworten:

Resultat:

sub  2048R/7F3611B3  created: 2010-01-15  expires: 2015-01-14  usage: E   

Sub-Key zum Signieren

> addkey

Antworten:

Resultat:

sub  2048R/B0ED0FE3  created: 2010-01-15  expires: 2015-01-14  usage: S

Speichern, Revokation-Certs, Backup

> save

Damit hat man seine Schlüssel erzeugt, bei Linux liegt das Resultat in ~/.gnupg/ !

/!\ Man sollte unbedingt Rückruf-Zertifikate erzeugen - das ist der einzige Weg, einen veröffentlichten Pubkey zurückzurufen, z.B. weil Passphrase vergessen, Secret-Key verloren / geklaut, etc.:

gpg --gen-revoke EE1E26A4 >revoke-EE1E26A4-no-reason.txt

Man kann hier entweder "no reason" auswählen und damit das Revocation-Cert erzeugen oder man erzeugt einfach mehrere Certs für alle verschiedenen Gründe.

Ggf. kann man auch noch ASCII-Exports der Keys erzeugen.

/!\ Gutes Backup erstellen (.gnupg-Verzeichnis und alle oben erzeugten Dateien)! CDROM, USB-Stick, ausdrucken, ... - und gut aufbewahren.

Public-Key veröffentlichen

Wenn man sich sicher ist, dass alles richtig erzeugt worden ist und man den Public Key einer breiten Öffentlichkeit zugänglich machen will, sollte man ihn an einen sog. Key-Server senden. Es spielt keine grosse Rolle an welchen, die Key-Server tauschen gegenseitig ihre Daten aus:

gpg --send-key EE1E26A4

Key-Eigenschaften

GPG-Visitenkarte

Als Vorbereitung für's Keysigning mit anderen GPG-Benutzern (z.B. "Keysigning-Party"), eine Visitenkarte oder nen Papierstreifen mit folgenden Infos machen:

Thomas Waldmann tw@waldmann-edv.de
Key-ID: 4096R/FAF7B393  Fingerprint: 6D5B EF9A DD20 7580 5747 B70F 9F88 FB52 FAF7 B393 

Hinweis: das sind meine richtigen Daten, nicht die aus dem Beispiel oben.

Keysigning

Wenn jemand möchte, dass man seinen Key unterschreibt ("signed"):

Später zu hause:

gpg --recv-keys KEYID    # Key von Key-Server runterladen
gpg --fingerprint KEYID  # Fingerprint erhaltener Key mit Fingerprint auf Papier vergleichen
gpg --list-key KEYID     # IDs (E-Mail-Adressen) herausfinden

Man sollte dann alle IDs (E-Mail-Adressen) checken, die man signiert; unterschiedliche verschlüsselte Test-E-Mails dort hin senden, den Empfaenger zu nem Fullquote auffordern und eine dementsprechende Antwort abwarten. So kann man pruefen, ob der E-Mail-Empfaenger auch wirklich den Secret-Key hat.

Bei Erfolg:

gpg --sign-key --ask-cert-level KEYID   # wenn OK, dann unterschreiben
gpg --send-keys KEYID    # Key mit Unterschrift auf Key-Server hochladen

(!) Normalerweise macht man das dann auch auf gegenseitiger Basis, wenn man schon dabei ist.

Verschlüsseln

gpg --encrypt --armor --recipient tw@waldmann-edv.de
test text
<Strg-D>

GPG hat hier von Standard-Input Text gelesen ("test text"), ihn mit dem Public Key von tw@waldmann-edv.de verschlüsselt und das Resultat auf Standard-Output ausgegeben.

Man kann auch von einer Datei lesen / in eine Datei schreiben:

gpg --encrypt --armor --recipient tw@waldmann-edv.de < test.asc > test.gpg.asc

Entschlüsseln

gpg --decrypt < test.gpg.asc 

You need a passphrase to unlock the secret key for
user: "Thomas Waldmann <tw@waldmann-edv.de>"
2048-bit RSA key, ID 7F3611B3, created 2010-01-15 (main key ID EE1E26A4)
<Passphrase eingeben>

gpg: encrypted with 2048-bit RSA key, ID 7F3611B3, created 2010-01-15
      "Thomas Waldmann <tw@waldmann-edv.de>"

test text

Wie man unten sieht, wurde der Text wieder entschlüsselt.

Daten signieren / Signatur checken

gpg --sign --armor --clearsign < test.asc > test.signed.asc

You need a passphrase to unlock the secret key for
user: "Thomas Waldmann <tw@waldmann-edv.de>"
2048-bit RSA key, ID B0ED0FE3, created 2010-01-15 (main key ID EE1E26A4)
<Passphrase eingeben>

Der Text ist nun digital unterschrieben:

Signatur checken

gpg --verify < test.signed.asc 
gpg: Signature made Fri 15 Jan 2010 03:44:12 AM CET using RSA key ID B0ED0FE3
gpg: Good signature from "Thomas Waldmann <tw@waldmann-edv.de>"

Vermeidbare Fehler

Software / Infos

GnuPG/KurzVortrag (zuletzt geändert am 2016-07-08 15:05:01 durch ThomasWaldmann)