ABSTRACT: GPG (gnu privacy guard) - ein public key verschluesselungssystem wird vorgestellt. AUDIENCE: users SYSTEM: any unix SECTION: usefull unix applications AUTHOR: mond 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 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