GNU Privacy Guard (GnuPG, GPG)
- Vortragender
- Thomas Waldmann
- 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
- FOSS (Free and Open Source Software) - wichtig!
- Verschlüsseln und/oder Signieren von Daten
- Asymetrisches sog. Public-Key-Verfahren, Schlüsselpaar:
- Public-Key ist öffentlich verfügbar
- Private-Key wird geheim gehalten und mit Passphrase geschützt
- GnuPG selbst ist ein Kommandozeilen-Tool, es gibt aber grafische Frontends dafür.
- Linux (und andere UNIX-Derivate), Mac OS X, Windows
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):
5 ( RSA, denn DSA ist limitiert auf 1024Bit, wir wollen aber mehr)
4096 ( 4096bit - soll lange halten, primary key wird von anderen Leuten signiert!)
- 10y (nämlich 10 Jahre)
- y (yes)
- Thomas Waldmann (nur Vorname Nachname)
tw@waldmann-edv.de (E-Mail-Adresse)
- (Kommentar, kann man leer lassen)
- o (okay)
- (wenn der Hinweis "Not enough random bytes available..." kommt:
- rumtippen, Maus schubsen, Plattenaktivität erzeugen, ...)
Passphrase: nicht zu einfach, wenn jemand in den Besitz des Secret-Keys kommt, ist die Passphrase der letzte Schutz vor Missbrauch!
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:
6 ( RSA, encrypt only)
2048 ( 2048 Bit ist sicher genug, muss nicht so lange halten wie Primary Key)
- 5y
Resultat:
sub 2048R/7F3611B3 created: 2010-01-15 expires: 2015-01-14 usage: E
Sub-Key zum Signieren
> addkey
Antworten:
5 ( RSA, sign only)
2048 ( 2048 Bit ist sicher genug, muss nicht so lange halten wie Primary Key)
- 5y
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
- Wenn der Public-Key einmal veröffentlicht wurde, kann er solange (von jedermann) zum VERschlüsseln benutzt werden, bis er abgelaufen ist oder widerrufen wurde.
- Der Besitzer des Private-Keys (plus Passphrase) kann auch nach dem Ablaufdatum mit dem Public-Key verschlüsselte Daten noch ENTschlüsseln.
Den Primary-Key kann man nur mit einem Revocation Cert widerrufen (und zur Erstellung dessen braucht man Private Key und Passphrase).
- Sub-Keys kann man als Besitzer des Primary-Private-Keys und der Passphrase sehr einfach widerrufen.
- Es ist möglich, die Gültigkeit von Keys zu verlängern.
- Es ist möglich, die Passphrase zu ändern.
- Es ist möglich, weitere IDs ("E-Mail-Adressen") zum Key hinzuzufügen.
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"):
- Name, E-Mail, Key Typ/Key ID, Key Fingerprint von ihm/ihr erhalten - man bekommt normalerweise eine "GPG-Visitenkarte"
- immer die Identität der Person persönlich und in Ruhe checken anhand eines gültigen Ausweises
- Name Ausweis mit Name auf GPG-Visitenkarte vergleichen
- wenn alles OK, macht man sich nen Vermerk auf die GPG-Visitenkarte (z.B. indem man selbst von Hand dort unterschreibt, dann weiss man später noch, dass alles OK war)
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:
- man weiss, wer ihn geschrieben hat
- man kann den Text nicht mehr ändern, ohne dass die Signatur dadurch ungültig wird
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
- erratbare / zu kurze Passphrase für Private Key
- Private Key kopiert, Passphrase von Dritten gelogged/gefilmt
- Schlüsselpaar auf nicht vertrauenswürdigem Rechner erstellt (Trojaner, Keylogger, ...)
- Private Key verloren und/oder Passphrase vergessen
- kein Backup
- kein Revocation Cert
- kein Ablaufdatum
- zu kurze Schlüssellänge (RSA 768 wurde vor kurzem geknackt)
- Pubkey nicht veröffentlicht
nichts signieren, was man später leugnen möchte
- kurze Key-IDs (32bit) benutzt - Verwechslungsgefahr!
Software / Infos
GnuPG http://www.gnupg.org/
EnigMail (komfortable GPG-Integration mit GPG-Konfigurations-Assistent für den Thunderbird E-Mail-Client) http://enigmail.mozdev.org/
Evolution (Linux E-Mail-Client, hat eine simple GPG-Anbindung eingebaut) http://projects.gnome.org/evolution/
Für Linux-User: http://pgp-tools.alioth.debian.org/ - div. Tools für's Key-Signing (z.B. "caff")