IT-Academy Logo
Sign Up Login Help
Home - Betriebssysteme - Linux - Anwendungssoftware - GPG (GNU Privacy Guard) - Eine Einführung



GPG (GNU Privacy Guard) - Eine Einführung

GPG (GNU Privacy Guard) - ein Public-Key Verschlüsselungssystem wird vorgestellt.


Autor: Franz Schaefer (mond)
Datum: 27-12-2002, 20:40:42
Referenzen: Keine.
Schwierigkeit: Anfänger
Ansichten: 5400x
Rating: Bisher keine Bewertung.

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Einleitung
GPG (GNU privacy guard oder GnuPG) ist ein Programm, das zur verschlüsselung von daten (z.b. E-Mails) dient. Dabei werden mathematische Algorithmen verwendet die sich "public key" Verschlüsselung nennen (wir kennen diese schon von ssh und openssl).

Wichtig für das Verständniss: es gibt einen geheimen (secret) Schlüssel und einen öffentlichen Schlüssel (public key). Aus dem public key den geheimen Schlüssel zu rekonstruieren ist nicht mit vertretbaren aufwand möglich (zu bedenken ist aber: es gibt zwar für die verwendeten mathematischen Verfahren keinen Hinweis, dass dies leicht möglich ist obwohl sehr viele Leute darüber nachgedacht haben, aber es gibt i.a. auch keinen mathematischen Beweis, dass es nicht ein einfaches Verfahren geben könnte).

GPG ist dem Programm PGP (pretty good privacy) nachempfunden. Phill Zimmermann's PGP war 1991 eines der ersten Programme das public key Verschlüsselung für die Allgemeinheit leicht zugänglich machte. Leider ist PGP heute kommerziell. Das GPL lizensierte GPG ist daher dem Original PGP vorzuziehen.

Die 2 wichtigsten Anwendungen von public key Verschlüsselung sind:

1. Verschlüsselung:
o Alice verschlüsselt ihre Nachricht mit dem öffentlichen Schlüssel von Bob und schickt sie an Bob.

o Bob kann die Nachricht mit dem nur ihm bekannten geheimen schlüssel entziffern.

2. Authentizität (digitale unterschrift)
o Alice signiert ihre Nachricht mit ihrem geheimen Schlüssel (die Nachricht bleibt dabei im Klartext lesbar)

o bob (und jeder andere) kann nun mit dem öffentlichen Schlüssel von Alice überprüfen, dass nur jemand der den geheimen Schlüssel zum öffentlichen Schlüssel von Alice hat diese Unterschrift verfassen konnte.

3. 1 und 2 lassen sich natürlich kombinieren.

Im Schnellgang durch GPG:
Wir erstellen uns einen eigenen schlüssel:
gpg --gen-key
(gpg fragt danach nach einigen informationen bezüglich zu verwendenden Algorithmus und Länge des keys etc... die vorgeschlagenen default Werte sind i.a. akzeptabel und man kann sie einfach bestätigen. Was man benötigt sind Name und E-Mail-Addresse. Weiters eine sogenannte "pass phrase" - in der deutsch Übersetzung "mantra" genannt.
Diese "pass phrase" beschützt den secret key. Der secret key kann nur in Zusammenhang mit dieser pass phrase verwendet werden. Die passphrase kann beliebig lang sein und sollte auch besser sein wie ein übliches passwort...)
Um zu sehen welche Schlüssel man in seinem schlüsselbund (key ring) hat kann man jetzt:
gpg --list-keys machen.
gpg --list-secret-keys zeigt nur eine liste der geheimen schlüssel an.
gpg --list-keys --fingerprint zeigt zu jedem key auch noch den sogenannten "finger print" an. Ein 128 bit langer Schlüssel der es erlaubt Schlüssel zu identifizieren. Man kann z.B. den fingerprint in seine E-Mail-Signature schreiben oder auf seine Visitenkarte. Jemand der sich dann aus eventuell unsicheren Quellen den public key besorgt kann dann diesen fingerprint vergleichen (jeder Schlüssel hat auch noch eine sogenannte ID die etwas kürzer ist. Manche Befehle wollen den Schlüssel mit dieser ID identifiziert haben).

schäfer@mondbasis:~ > gpg --list-keys --fingerprint
pub 1024D/CFA2F632 1999-07-05 franz schäfer <schäfer@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 schlüssels

der fingerprint dazu ist:
57C2 C0CC 6F0A 54C7 0D88 D37E C17C CB16 CFA2 F632

Womit wir schon beim Thema sind: wie erfährt die weite Welt jetzt von unserem neuen Schlüssel?

gpg -a --output meinschlüssel.asc --export meinname@meinedomain.at
Im file "meinschlüssel.asc" befindet sich jetzt der öffentliche Schlüssel. Man kann dieses file auf der Homepage publizieren oder an seine Freunde E-Mailen. Diese sollten allerdings, bevor sie den Schlüssel importieren den fingerprint überprüfen.
Die Option "-a" sagt, dass das Ausgabeformat in "ascii armor" format ist.

Eine andere Möglichkeit den Schlüssel bekannt zu machen ist es ihn an einen keyserver zu senden. GPG hat die Technik dazu schon eingebaut:
gpg --keyserver wwwkeys.ch.pgp.net --send-keys meinname@meinedomain.at
(nicht alle keyserver können 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 Schlüssel an einen der keyserver zu senden: diese synchronisieren sich untereinander.
Wie importieren wir einen schlüssel den wir von jemand anderen als file erhalten haben?

gpg --with-fingerprint schlüsselvonjemandanderem.asc
zeigt uns an was in dem file schlüsselvonjemandanderem.asc für schlüssel enthalten sind (mit der option --with-fingerprint auch den fingerprint dazu)

gpg --import schlüsselvonjemandanderem.asc
würde diesen schlüssel importieren. Wie weit man diesem Schlüssel in Zukunft vertraen 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 zeigt den fingerprint zum aktuellen Schlüssel
check zeigt wer den schlüssel aller unterschrieben (bestätigt hat)
sign erlaubt es den Schlüssel selbst zu unterschreiben (man bestätigt damit die Echtheit - d.h. man sollte vorher den fingerprint verlässlich überprüft haben)
trust erlaubt es die Vertraunsstellung dieses Schlüssels zu modifizierens.

Das Unterschreiben von Schlüsseln ist eine praktische Möglichkeit um die Authentizität eines Schlüssels zu erhöhen. Auf key signing parties tauschen Freunde ihre keys aus und unterschreiben sie gegenseitig. Damit bestätigt man, dass der Schlüssel wirklich zu der entsprechenden Person gehört.

Ok wie verschlüsseln wir jetzt? Angenommen wir sind Alice und haben gerade eben den Schlüssel von bob@irgendwo.at erhalten und importiert.

gpg --encrypt --recipient bob@irgendwo.at geheimplan.txt
Das würde das file mit dem Namen "geheimplan.txt" verschlüsseln und ein file namens:

geheimplan.txt.gpg
erzeugen. Das enthält die verschlüsselte Nachricht (die Ausgabe ist ein binäres 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
Dmit bob sicher sein kann,dass dieser Geheimplan wirklich von uns ist müssen wir ihn auch unterschreiben. Dazu geben wir zusätzlich die option --sign an:

gpg --encrypt --recipient --sign bob@irgendwo.at
Danach müssen wir natürlich die passphrase für unseren secret key eingeben.
Oft ist es nicht so wichtig, dass eine Nachricht geheim ist aber man will trotzdem die Authentizität sicherstellen. In diesem Falle verwendet man nur --sign:

gpg --sign meinletzterwille.txt
Das Ergebnis ist wieder ein binäres file meinletzterwille.txt.gpg, dass zwar nur mit Hilfe von GPG gelesen werden kann aber ansonsten unverschlüsselt ist (also jeder der GPG aufruft kann das file entpacken.)
Will man das das Original txt file ohne GPG lesbar in die Ausgabe übernommen wird (praktisch für E-Mail die dann auch für 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 zusätzlich die Unterschrift am Ende.

Als dritte Möglichkeit will man ab und zu die Unterschrift zu einem file in einem eigenen file haben. Als Option dazu dient --detach-sig
Gute E-Mail Programme (z.b. mutt) haben heute Unterstützung für GPG eingebaut die es erleichtern, E-Mails verschlüsselt und authentisch zu versenden.

GPG gibt es auch für Windows. Weiters gibt es grafische Front-Ends die die Bedienung gegenüber dem praktischen commandline interface verkomplizieren.
Zu bedenken beim Einsatz von Verschlüsselung:
* ist die Maschine auf der ich GPG benutze sicher? Oder besteht die Gefahr das die Maschine gehackt ist oder wird und mein key damit kompromittiert wurde/wird? Vertraue ich meinem Admin?
* verschlüsselt kann nur der inhalt der Nachricht werden: aber die Verbindungsdaten (wer mit wem, wann kommuniziert) sind weiterhin offen.

Als Abhilfe hier können "anonymous remailer" oder "mixmaster" schaffen:
http://riot.eu.org/anon/
http://www.helferlein.net/mixmaster/
http://anon.efga.org/
* Wer Verschlüsselung verwendet macht sich generell verdächtig: was hat er zu verbergen? Es ist daher ein Akt der Solidarität Verschlüsselung auch dort zu verwenden wo sie nicht wirklich nötig wäre (E-Mail an die Oma). Je mehr Leute Verschlüsselung verwenden, desto schwieriger wird es für bigbrother herauszufinden wer wiklich etwas geheim halten will.

EXERCISES:
* Erzeuge Dir einen Schlüssel. Speichere ihn auf Deiner Homepage und submitte ihn an einen keyserver.
* Importiere den Schlüssel anderer Dir bekannter Leute und überprüfe dabei den fingerprint.
* Schicke jemand eine verschlüsselte und signierte email.

REFERENCES:
man gpg
info gpg
http://www.gnupg.org/
http://www.cs.auckland.ac.nz/~pgut001/links.html
_______________________________________________
XX CD ist ein Service von
XXXX SILVER SERVER
XXXX XX http://www.sil.at
XX XX
XXXX XX der Inhalt unterliegt der GFDL
XXXX http://www.gnu.org/licenses/fdl.txt
XX

http://mailman.sil.at/mailman/listinfo/cd


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04508
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06246
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1154
Comments: 0