original document: http://mailman.sil.at/pipermail/cd/2002-December/000100.html
gpg
ABSTRACT: GPG (gnu privacy guard) - ein public key verschluesselungssystem
wird vorgestellt.
AUDIENCE: users
SYSTEM: any unix
SECTION: usefull unix applications
AUTHOR: mond <fs@sil.at>
COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt
GPG (GNU privacy guard oder GnuPG) ist ein programm dass zur
verschluesselung von daten (z.b. emails) dient. dabei werden mathematische
algorithmen verwendet die sich "public key" verschluesselung nennen. (wir
kennen diese schon von ssh und openssl)
wichtig fuer das verstaendniss: es gibt einen geheimen (secret) schluessel
und einen oeffentlichen schluessel (public key). aus dem public key den
geheimen schluessel zu rekonstruieren ist nicht mit vertretbaren aufwand
moeglich. (zu bedenken ist aber: es gibt zwar fuer die verwendeten
mathematischen verfahren keinen hinweis dass dies leicht moeglich ist obwohl
sehr viele leute darueber nachgedacht haben: aber es gibt i.a. auch keinen
mathematischen beweiss dass es nicht ein einfaches verfahren geben
koennte.)
GPG ist dem programm PGP (pretty good privacy) nachempfunden. phill
zimmermann's PGP war 1991 eines der ersten programme das public key
verschluesselung fuer die allgemeinheit leicht zugaenglich machte. leider
ist PGP heute kommerziell. das GPL lizensierte GPG ist daher dem original
PGP vorzuziehen.
die 2 wichtigsten anwendungen von public key verschluesselung sind:
1.) verschluesselung:
o alice verschluesselt ihre nachricht mit dem oeffentlichen schluessel von
bob und schickt sie an bob.
o bob kann die nachricht mit dem nur ihm bekannten geheimen schluessel
entziffern.
2.) authentizitaet (digitale unterschrift)
o alice signiert ihre nachricht mit ihrem geheimen schluessel. (die
nachricht bleibt dabei im klartext lesbar)
o bob (und jeder andere) kann nun mit dem offentlichen scluessel von
alice uerpruefen dass nur jemand der den geheimen schluessel zum
offentlichen schluessel von alice hat diese unterschrift verfassen
konnte.
3.) 1 und 2 lassen sich natuerlich kombinieren.
im schnellgang durch GPG:
wir erstellen uns einen eigenen schluessel:
gpg --gen-key
(gpg fragt danach nach einigen informationen bezueglich zu verwendenden
algorithmus und lenge des keys etc.. die vorgeschlagenen default werte
sind i.a. akzeptabel und man kann sie einfach bestaetigen. was man
benoetigt sind sein name und seine email addresse. weiters eine
sogenannte "pass phrase" - in der deutsch uebersetzung "mantra" genannt.
diese "pass phrase" beschuetzt den secret key. der secret key kann nur
in zusammenhang mit dieser passphrase verwendet werden. die passphrase
kann beliebig lang sein und sollte auch besser sein wie ein uebliches
passwort...)
um zu sehen welche schluessel man in seinem schluesselbund (key ring)
hat. kann man jetzt:
gpg --list-keys
machen.
gpg --list-secret-keys
zeigt nur eine liste der geheimen schluessel an.
gpg --list-keys --fingerprint
zeigt zu jedem key auch noch den sogenannten "finger print" an. ein 128
bit langer schluessel der es erlaubt schluessel zu identifizieren. man
kann z.b. den fingerprint in seine email signature schreiben oder auf
seine visitenkarte. jemand der sich dann aus eventuell unsicheren quellen
den public key besorgt kann dann diesen fingerprint vergleichen. (jeder
schluessel hat auch noch eine sogenannte ID die etwas kuerzer ist. manche
befehle wollen den schluessel mit dieser ID identifiziert haben)
schaefer@mondbasis:~ > gpg --list-keys --fingerprint
pub 1024D/CFA2F632 1999-07-05 franz schaefer <schaefer@mond.at>
Key fingerprint = 57C2 C0CC 6F0A 54C7 0D88 D37E C17C CB16 CFA2 F632
sub 2048g/91E73F4A 1999-07-05 [expires: 2031-01-06]
CFA2F632 ist hier die ID meines schluessels
der fingerprint dazu ist:
57C2 C0CC 6F0A 54C7 0D88 D37E C17C CB16 CFA2 F632
womit wir schon beim thema sind: wie erfaehrt die weite welt jetzt von
unserem neuen schluessel?
gpg -a --output meinschluessel.asc --export meinname@meinedomain.at
im file "meinschluessel.asc" befindet sich jetzt der oeffentliche
schluessel. man kann dieses file auf der homepage publizieren oder an
seine freunede emailen. diese sollten allerdings, bevor sie den
schluessel importieren den finerprint ueberpruefen.
die option "-a" sagt dass das ausgabeformat in "ascii armor" format ist.
eine andere moeglichkeit den schluessel bekannt zu machen ist es ihn an
einen keyserver zu submitten. gpg hat die technik dazu schon eingebaut:
gpg --keyserver wwwkeys.ch.pgp.net --send-keys meinname@meinedomain.at
(nicht alle keyserver koennen direkt mit gpg kommunizieren. manche haben
auch nur ein web interface zum abfragen und submitten von keys)
eine liste von key servern:
http://pgp.zdv.uni-mainz.de/keyserver/bigbrother/
http://www.keyserver.net/en/other.html
http://openpksd.org/kslist.html
es reicht seinen schluessel an einen der keyserver zu senden: diese
synchronisieren sich untereinander.
wie importieren wir einen schluessel den wir von jemand anderen als file
erhalten haben?
gpg --with-fingerprint schluesselvonjemandanderem.asc
zeigt uns an was in dem file schluesselvonjemandanderem.asc fuer
schluessel enthalten sind (mit der option --with-fingerprint auch den
fingerprint dazu)
gpg --import schluesselvonjemandanderem.asc
wuerde diesen schluessel importieren. wie weit man diesem schluessel in
zukunft vertrauen will kann man mit:
gpg --edit-key jemandanderer@irgendwo.at
danach noch festlegen. gpg gibt einen prompt aus ("Command> ") mit
help bekommt man eine kurze hilfe
fpr zeit den fingerprint zum aktuellen schluessel
check zeigt wer den schluessel aller unterschrieben (bestaetigt hat)
sign erlaubt es den schluessel selbst zu unterschreiben (man bestaetigt
damit die echtheit - d.h. man sollte vorher den fingerprint
verlaesslich ueberprueft haben)
trust erlaubt es die vertraunsstellung dieses schluessels zu
modifizierens.
das unterschreiben von schluesseln ist eine praktische moeglichkeit um die
authentizitaet eines schluessels zu erhoehen. auf key signing parties
tauschen freunde ihre keys aus und unterschreiben sie gegenseitig. damit
bestaetigt man dass der schlussel wirklich zu der entsprechenden person
gehoert.
ok wie verschluesseln wir jetzt? angenommen wir sind alice und haben
gerade eben den schluessel von bob@irgendwo.at erhalten und importiert.
gpg --encrypt --recipient bob@irgendwo.at geheimplan.txt
das wuerde das file mit dem namen "geheimplan.txt" verschluesseln und ein
file namens:
geheimplan.txt.gpg
erzeugen. das enthaelt die verschluesselte nachricht. (die ausgabe ist ein
binaeres dateiformat. will man die ausgabe als ascii text haben so kann
man wieder die -a option verwenden:
gpg -a --encrypt --recipient bob@irgendwo.at geheimplan.txt
das erzeugt das file:
geheimplan.txt.asc
damit bob sicher sein kann dass dieser geheimplan wirklich von uns ist
muessen wir ihn auch unterschreiben. dazu geben wir zusaetzliche die
option --sign an:
gpg --encrypt --recipient --sign bob@irgendwo.at
danach muessen wir natuerlich die passphrase fuer unseren secret key
eingeben.
oft ist es nicht so wichtig dass eine nachricht geheim ist aber man will
trotzdem die authentizitaet sicherstellen. in diesem falle verwendet man
nur --sign:
gpg --sign meinletzterwille.txt
das ergebniss ist wieder ein binaeres file meinletzterwille.txt.gpg dass
zwar nur mit hilfe von gpg gelesen werden kann aber ansonsten
unverschluesselt ist. (also jeder der gpg aufruft kann das file entpacken)
will mann dass das original txt file ohne gpg lesbar in die ausgabe
uebernommen wird (praktisch fuer email die dann auch fuer leute lesbar sind
die kein gpg installiert haben) so verwendet man die option --clearsign
gpg --clearsign meinletzterwille.txt
das ausgabefile: meinletzterwille.txt.asc hat das file im klartext aber
zusaetzlich die unterschrift am ende.
als dritte moeglichkeit will man ab und zu die unterschrift zu einem file
in einem eigenen file haben. als option dazu dient --detach-sig
gute email programme (z.b. mutt) haben heute unterstuetzung fuer GPG
eingebaut die es erleichtern emails verschluesselt und authentisch zu
versenden.
gpg gibt es auch fuer windows. weiters gibt es grafische frontends die die
bedienung gegenueber dem praktischen commandline interface
verkomplizieren.
zu bedenken beim einsatz von verschluesselung:
* ist die maschine auf der ich GPG benutze sicher? oder besteht die gefahr
dass die maschine gehackt ist oder wird und mein key damit
kompromittiert wurde/wird? vertraue ich meinem admin?
* verschluesselt kann nur der inhalt der nachricht werden: aber die
verbindunsdaten (wer mit wem wann kommuniziert) sind weiterhin offen.
als abhilfe hier koennen "anonymous remailer" oder "mixmaster" schaffen:
http://riot.eu.org/anon/
http://www.helferlein.net/mixmaster/
http://anon.efga.org/
* wer verschluesselung verwendet macht sich generell verdaechtig: was hat
er zu verbergen? es ist daher ein akt der solidaritaet verschluesselung
auch dort zu verwenden wo sie nicht wirklich noetig waere (email an die
oma). je mehr leute verschluesselung verwenden desto schwieriger wird es
fuer bigbrother herauszufinden wer wiklich etwas geheim halten will.
EXERCISES:
* erzeuge dir einen schluessel. speichere ihn auf deiner homepage und
submitte ihn an einen keyserver.
* importiere den schluessel anderer dir bekannter leute und ueberpruefe
dabei den fingerprint.
* schicke jemand eine verschluesselte und signierte email.
REFERENCES:
man gpg
info gpg
http://www.gnupg.org/
http://www.cs.auckland.ac.nz/~pgut001/links.html