Tutorials - GnuPG (GPG) Tutorial

Sprachenübersicht/Betriebssysteme/Linux/Security

GnuPG (GPG) Tutorial

Diese Seite wurde 51450 mal aufgerufen.

Dieser Artikel wurde in einem Wikiweb System geschrieben, das heißt, Sie können die Artikel jederzeit editieren, wenn Sie einen Fehler gefunden haben, oder etwas hinzufügen wollen.

Editieren Versionen Linkpartnerschaft Bottom Printversion

Keywords: GPG, GnuPG, asymmetrisch, signatur, Tutorial

Abbildung

Inhaltsverzeichnis



Einführung in GPG Top



GnuPG, kurz GPG ist ein OpenSource-Ersatz für PGP, einem E-Mail- und Datenversschlüsselungsprogramm. Seitdem eine Bibliothek (GPGME) für Entwickler existiert steht dem Einsatz des Tools nichts mehr im Wege.

GPG arbeitet mit einem asymmetrischen Verschlüsselungsverfahren, es gibt es ein Schlüsselpaar welches zusammengehört, der Text, der vom public key(wird öffentlich gemacht) verschlüsselt wird kann nur mit dem private key gelesen werden.

Wenn man einen key kennt kann man daraus nicht auf den anderen schließen, d.h. ich kann jemand einen Schlüssel schicken, damit er eine Nachricht für mich verschlüsselt. Der Schlüssel zum entschlüsseln besitze nur ich.

Installation Top



Das GPG Packet finden Sie unter www.gnupg.org/, oder im Packetverzeichniss Ihrer Distribution.


  • Debian

    Unter Debian reicht ein apt-get install gnupg.



  • RedHat RPM

    Wenn das Packetverwaltungssystem RPM installiert ist, müssen Sie nur das rpm Packet (google: gnupg .rpm "index of") herunterladen, und es ausführen.



  • Source Code

    Wie schon oben erwähnt finden wir die Source Codes von gpg auf www.gnupg.org/.

    Nachdem Sie folgende Schritte ausgeführt haben, sollte das Packet installiert sein:

    Code:


    workstation:~# tar -xzvf gnupg-versionnumber.tar.gz
    workstation:~# cd gnupg-versionnumber
    workstation:~# ./configure
    workstation:~# make
    workstation:~# make install



    Wenn Sie andere configure Optionen benutzen wollen, müssen werfen Sie einen Blick in die Datei README im gpg Sourcecode-Verzeichniss.



Schlüsselpaar erstellen Top



Für die Verschlüsselung/Entschlüsselung von Mails brauchen wir 2 Schlüssel:

-) einen private key
-) einen public key

Das Schlüsselpaar erzeugen wir mit dem Befehl gpg --gen-key:

Achtung:


Seien Sie nicht verwirrt, wenn bei der ersten Benutzung folgende Meldungen kommen:

gpg: /root/.gnupg: directory created
gpg: new configuration file `/root/.gnupg/gpg.conf' created
gpg: WARNING: options in `/root/.gnupg/gpg.conf' are not yet active during this run

Das bedeutet nur das die Konfigurationsdateien erstellt wurden.



Code:


workstation:/opt/gnupg-1.4.1# gpg --gen-key
gpg (GnuPG) 1.2.5; Copyright (C) 2004 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

Please select what kind of key you want:
   (1) DSA and ElGamal (default)
   (2) DSA (sign only)
   (4) RSA (sign only)
Your selection? 



Wie Sie sehen müssen wir hier den Verschlüsselungsalgorithmus angeben.

Wir verwenden hier die Auswahl 1:

Code:


Your selection? 1
DSA keypair will have 1024 bits.
About to generate a new ELG-E keypair.
              minimum keysize is  768 bits
              default keysize is 1024 bits
    highest suggested keysize is 2048 bits
What keysize do you want? (1024) 



Hier müssen wir die Schlüssellänge angeben, wenn sie 768 benutzten werden ihre Daten zwar schneller verschlüsselt, aber dafür sinkt die Sicherheit.

Wir benutzen 2048, und die Frage wie lange soll der Schlüssel halten, beantworten wir mit 3 Jahren:

Code:


What keysize do you want? (1024) 
Requested keysize is 2048 bits   
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0) 3y
Key expires at Thu 02 Oct 2008 08:30:57 PM CEST
Is this correct (y/n)? y
                        
You need a User-ID to identify your key; the software constructs the user id
from Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name: 



Nachdem wir unsere Angaben bestätigt haben, werden wir nach dem Namen gefragt. Geben Sie diese Angaben an, und bestätigen Sie danach mit O

Code:


Real name: Simon Hecht
Email address: email@online-tutorials.net    
Comment: Administrator von www.online-tutorials.net
You selected this USER-ID:                         
    "Simon Hecht (Administrator von www.online-tutorials.net) <email@online-tutorials.net>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.    

Enter passphrase: 



Jetzt müssen wir eine passphrase, sowas wie ein Kennwort für unseren Key eingeben, und bestätigen.

Jetzt wird der Schlüssel erstellt, dafür müssen sehr viele Zufallszahlen erzeugt werden. Laufen währenddessen auf dem Rechner viele andere, möglichst zufällige Prozesse (Proxy oder Mailserver unter hoher Last, Mausbewegung, etc.) so sind die erzeugten Zufallszahlen besser (zufälliger)

Code:


We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
++++++++++++++++++++.++++++++++.+++++.++++++++++++++++++++.+++++++++++++++++++++
++++++++++++++.++++++++++++++++++++.++++++++++++++++++++>+++++.+++++>.+++++.....
............................................+++++
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
+++++.+++++++++++++++.+++++++++++++++++++++++++..++++++++++.++++++++++++++++++++
.+++++++++++++++.+++++++++++++++.+++++.++++++++++.++++++++++....................
......................................................>+++++....................
........................+++++^^^
gpg: /root/.gnupg/trustdb.gpg: trustdb created
public and secret key created and signed.
key marked as ultimately trusted.

pub  1024D/75EB737F 2005-03-21 Simon Hecht (Administrator von www.online-tutoria
ls.net) <email@online-tutorials.net>
     Key fingerprint = 0F2E 6E1E C9E9 5C47 272A  7994 FBD4 2253 75EB 737F
sub  1024g/0511DE9D 2005-03-21



Das Schlüsselpaar wurde erfolgreich erstellt.

Schlüssel exportieren Top



Damit uns andere eine Nachricht schicken können müssen wir den Schlüssel jetzt noch exportieren.

Dazu leiten wir gpg --export -a <Name> einfach per STOUT in eine Datei um (der a Parameter steht für ASCII):

Code:


gpg --export -a Simon Hecht > public_key.key

oder benutzen den -o Parameter:

gpg --export -a -o public_key.key Simon Hecht



Schlüssel importieren Top



Natürlich können wir auch public keys von anderen Leuten importieren, damit wir Mails für diese Leute verschlüsseln können.

Mit --import importieren wir einen Schlüssel:

Importieren:


gpg --import public_key.txt 



Schlüssel anzeigen lassen Top



Mit gpg --list-keys werden die Schlüssel angezeigt, die vorhanden sind.

Um die geheime Schlüssel anzeigen zu lassen benutzen Sie folgenden Befehl:

Code:


gpg --list-secret-keys



Mit gpg --fingerprint kann man die Signaturen der Schlüssel anzeigen lassen, dadurch können Sie schneller verglichen werden.

Zertifikat für die Ungültigkeitserklärung Top



Damit wir den Schlüssel später als ungültig erklären lassen können sollten wir ein Revoke-Zertifikat erstellen, damit können wir später beweisen das der Schlüssel ungültig ist.

Nachdem das Zertifikat erstellt wurde speichern wir es an einem sicheren Ort, oder drucken aus, und bewahren es an einem sicheren Ort:

Code:


#drucken
gpg --gen-revoke <USERID> | lpr

#ODER

(umask 077 && gpg --gen-revoke <USERID> > gpg-revoke.txt)



Schlüssel löschen Top



Wenn Sie einen öffentlichen Schlüssel löschen wollen, benutzen Sie gpg --delete-key [UID], die UID finden Sie mit --list-keys heraus, oder wir benutzen die E-Mail Adresse, oder der Username (muss unter Anführungszeichen sein, wenn ein Leerzeichen vorkommt).

Damit ein geheimer Schlüssel gelöscht wird, benutzen Sie: gpg --delete-secret-key [UID]

Schlüssel editieren Top



Wenn Sie einen Schlüssel editieren wollen, benutzen Sie den Befehl:

Code:


gpg --edit-key [UID]



Sobald Sie den Befehl ausgehührt haben erwartet das Programm einen Befehl, mit HELP finden Sie den passenden Befehl heraus.

Code:


simon@workstation:~$ gpg --edit-key B4D67F23
gpg (GnuPG) 1.4.1; Copyright (C) 2005 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

Secret key is available.

pub  1024D/0768A9B7  created: 2005-03-21  expires: never       usage: CS  
                     trust: ultimate      validity: ultimate
sub  2048g/B4D67F23  created: 2005-03-21  expires: never       usage: E   
[ultimate] (1). Simon Hecht (Administrator von www.online-tutorials.net) <simon_hecht@online-tutorials.net>

Command> HELP
...



Schlüssel signieren Top



Mit dem Command sign im Editieren-Modus (siehe 10 Zeilen weiter oben) können wir einen Schlüssel signieren, das ist der einzige Weg sicherzugehen das wir den richtigen Schlüssel erhalten haben.

Mit dem ownertrust legen wir fest, wie stark wir dem Schlüssel vertrauen, das können wir mit dem Command trust einstellen.

Datei verschlüsseln Top



Langsam wird es Zeit, dass wir anfangen, eine Datei zu verschlüsseln.

Dazu erstellen wir eine Datei mit dem geheimtext:

echo "Der blubbfish geht um!" > secret.blubb

Jetzt können wir die Datei mit:

Code:


gpg --recipient "Simon Hecht" --encrypt --armor secret.blubb



verschlüsseln, wobei --armor verwendet wird, wenn der Output ASCII sein soll.

Jetzt wird entweder eine secret.blubb.asc (--armor) oder eine secret.blubb.gpg Datei (binär) erstellt.

Datei entschlüsseln Top



Eine verschlüsselte Datei kann man dann mit

Code:


gpg --recipient "Simon Hecht" --decrypt secret.blubb.gpg > secret_encrypted_gpg.blubb

#ODER

gpg --recipient "Simon Hecht" --decrypt secret.blubb.asc  > secret_encrypted_asc.blubb



entschlüsseln.

Der Beweis das die Anfangsdatei, und die entschlüsselte gleich sind liefert diff:

Code:


diff secret.blubb secret_encrypted_asc.blubb

#ODER

diff secret.blubb secret_encrypted_gpg.blubb



Signatur überprüfen/signieren Top



Wenn wir eine Datei mit unsererm privaten Key signieren (Unterschreiben) lassen wollen, benutzen wir den folgenden Befehl:

Code:


gpg --sign [File]



das komprimiert die Datei gleichzeitig und macht sie dadurch unleserlich.

Das signieren einer Datei ist das selbe, wie das verschlüsseln, nur das hier der private key als public key verwendet wird, so kann man das ganze mit dem public key überprüfen.

Wenn wir die Datei lesbar behalten wollen benutzen wir:

Code:


gpg --clearsign [File]



Und mit -b, oder --detach-sign:

Code:


gpg -b (--armor) [File]



erzeugen wir die Signatur ein einer seperaten Datei. Mit --armor bleibt die Datei im ASCII Format.

Das Parameter -b für die Signatur ist vor allem bei Binärdateien wie z.B. Archiven zu empfehlen.

Wenn wir eine Datei verschlüsseln und signieren wollen (was normalerweise gemacht wird), müssen wir folgendes Parameter benutzen:

Code:


gpg [--local-user Sender] [--recipient Empfänger] [--armor] --sign --encrypt [Datei]



Wenn eine verschlüsselte Datei signiert ist wird die Signatur beim entschlüsseln automatisch überprüft, wenn sie unverschlüsselt ist müssen wir den folgenden Befehl ausführen:

Code:


gpg [--verify] [Datei]



Sicherheit Top



Eine potentielle Sicherheitslücke ist der public key.

Ein Angreifer kann dem User einen falschen public key unterschieben, der nicht zum private key des Empfängers sondern zum eigenen public passt.

Damit das nicht passiert bildet man sogenannte chain of trusts. Man lässt die public keys von Mitmenschen, welchen man Vertraut signieren.

Dies spielt vorallem bei der Verwendung von keyservern eine wichtige Rolle, meistens bekommt man dort vom Besitzer des private key einen fingerprint(hashwert) vom public key.

Schlüssel hochladen Top



Im Internet gibt es keyserver auf die Sie ihren public key hochladen können, sobald Sie ein Schlüsselpaar und das dazugehörige revoke Zertifikat erstellt haben.

Dazu exportieren Sie am besten ihren public key, und schicken ihn dann per E-Mail zum keyserver:

Code:


gpg -a --export [UID] | mail -s "add" keyserver-email-adresse



Hier werden drei Keyserver aufgelistet:

Code:


Schweiz    pgp-public-keys@keys.ch.pgp.net    http://wwwkeys.ch.pgp.net/
Deutschland    pgp-public-keys@keys.de.pgp.net    http://wwwkeys.de.pgp.net/
Östereich    pgp-public-keys@keys.at.pgp.net    http://wwwkeys.at.pgp.net/



Bald darauf bekommen Sie eine Bestätigung dass der Schlüssel hinzugefügt wurde, wenn Sie später eine neue UserID hinzufügen, oder der Schlüssel von jemand anderem signiert wurde merkt der Keyserver das, und fügt Sie hinzu, wenn Sie den Schlüssel erneut hochladen.

Alternativ kann man den Schlüssel mit folgendem Command hochladen:

Code:


gpg --keyserver keyserver-url --send-key [UID]



Fremde Schlüssel herunterladen Top



Fremde public keys kann man ganz einfach per Mail vom server anfordern, im Subject muss nur das Wort get gefolgt von der E-Mail Adresse vorkommen:

Code:


mail -s "get email@online-tutorials.net" keyserver-email-adresse



Kurz darauf sollten Sie ein mail erhalten.

Alternative:

Code:


gpg --keyserver keyserver-url --recv-keys [ID_VOM_PUBLIC_KEY_AUF_DEM_SERVER]



Schlüssel mit dem Revoke Zertifikat ungültig erklären lassen Top



Sie können Schlüssel von keyservern zwar nicht löschen, Sie können Sie aber mit dem revoke Zertifikat als ungültig erklären lassen.

Dazu schicken Sie das revoke Zertifikat einfach mit dem Subject add an den keyserver:

Code:


cat gpg-revoke.txt | mail -s "add" keyserver



Enigmail Top



Enigmail ist eine Extension für den Mail-Client Mozilla Thunderbird, damit können Sie ihre Emails schnell und praktisch verschlüsseln, oder signieren lassen.

Enigmail finden Sie hier. Dort wählen Sie die Sprache ihres Mail-Clients aus.

Laden Sie die entsprechende .xpi und .xpi.asc herunter (Rechtsklick->Speichern unter).

Als nächstes Überprüfen wir die Datei auf fehlerhafte Teile, dafür laden Sie sich den öffentlichen Schlüssel von Engimail herunter: enigmail.mozdev.org/pgp-key.html. Kopieren Sie ihn in eine Datei, und importieren Sie ihn mit gpg --import datei.gpg.

Jetzt können Sie die Datei mit gpg --verify dateiname.xpi.asc die Integrität der Datei bestätigen lassen.

Starten Sie Thunderbird, und gehen Sie auf Tools->Extensions->Install dort wählen Sie die .xpi Datei aus, und installieren Sie. Jetzt müssen Sie Thunderbird neustarten, damit die Erweiterung benutzt werden kann.

Verfassen Sie eine neue Nachricht, und klicken Sie auf OpenGPG. Jetzt werden Sie gefragt, ob Sie Enigmail jetzt konfigurieren wollen, klicken Sie auf Ja.

Klicken Sie auf Enable OpenGPG Support, jetzt sollte sich ein Wizard öffnen, klicken Sie auf weiter. Wählen Sie jetzt die Email Adressen aus für die Sie Enigmail benutzen wollen, und klicken Sie auf weiter. Als nächstes können Sie sich entscheiden ob Sie alle Email signieren lassen wollen. Klicken Sie auf Ja, und dann auf weiter wenn Sie das wollen.

Jetzt müssen Sie sich entscheiden ob alle Email automatisch alle Email verschlüsseln lassen wollen. Klicken sie zwei mal auf weiter, und wählen Sie dann ihren private Key aus, und klicken Sie sich bis zum Ende des Dialogs mit "Weiter" durch.

Jetzt müssen Sie in dem auftauchenden Dialog nochmal einen Schlüssel auswählen. Sie können jetzt noch ein paar Fein-Einstellungen machen.

Damit wäre die Konfiguration abgeschlossen, wenn Sie jetzt auf OpenGPG klicken können Sie z.B. eine Nachricht signieren, oder verschlüsseln lassen. Zum Verschlüsseln müssen Sie natürlich davor den öffentlichen Key importiert haben.

Schauen Sie sich das Menü OpenGPG am besten genauer an, es bietet zahlreiche weitere Optionen.

Weblinks Top



GnuPG

- www.gnupg.org/download.html/ Die GPG Homepage
- www.gnupg.org/howtos/de/ Ein howto
- www.linux-magazin.de/Artikel/ausgabe/1999/12/GnuPG/gnupg.html
- www.rubin.ch/pgp/pgp.de.html Tipps zu GPG
- www.gnupg.org/documentation/manpage.en.html Die englischsprachige manpage

Kryptographie

- www.cacr.math.uwaterloo.ca/hac/ Handbook of Applied Cryptographie (englisch)

mfg. Simon Hecht

Gibt es noch irgendwelche Fragen, oder wollen Sie über den Artikel diskutieren?

Editieren Versionen Linkpartnerschaft Top Printversion

Haben Sie einen Fehler gefunden? Dann klicken Sie doch auf Editieren, und beheben den Fehler, keine Angst, Sie können nichts zerstören, das Tutorial kann wiederhergestellt werden

Sprachenübersicht/Betriebssysteme/Linux/Security/GnuPG (GPG) Tutorial