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
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.
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.
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.
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
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
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.
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)
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]
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
...
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.
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.
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
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]
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.
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 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]
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 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.
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