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