http://www.net-tex.de

GPG

Signaturen und Verschlüsselung

Ein kurze Begriffsklärung (Index)

verschlüsseln: Daten werden durch mathematische Verfahren "unlesbar" gemacht und können nur nach Angabe eines Schlüssels (z. B. Passwort) wieder lesbar dargestellt werden. Unbefugte können Daten nicht lesen oder verändern.

signieren: durch ein mathematisches Verfahren wird eine Signatur über Daten erstellt, dies dient dazu die Integrität der Daten zu sichern. Ändert also jemand die Daten, passt die Signatur nicht mehr und die Manipulation wird angezeigt. Zum Erstellen der Signatur ist der private Schlüssel erforderlich, dadurch lässt sich auch die Authenzität eines Absenders nachweisen.

symmetrisch Daten werden mit genau einem Schlüssel ver- und entschlüsselt. Kommunikationspartner müssen also den Schlüssel (z. B. ein Passwort) austauschen.

asymmetrisch Es werden Schlüsselpaare aus öffentlichem Sclüssel des Empfängers und privatem Schlüssel des Senders verwendet. Entschlüsseln kann die Daten nur, wer Zugriff auf den privaten Schlüssel des Empfängers hat.

Signaturen (Index)

Da PGP ursprünglich nur für eMails angedacht war, wurde eine sogenannte Inline-Signatur erstellt, d.h. die erzeugte Signatur wurde in die Datei geschrieben. Dies funktioniert bei einer eMail, die ja nichts weiter als simpler ASCII-Text ist soweit ganz gut, bei einer anders codierten Datei (PDF, MP3, JPEG ...) funktioniert dies verständlicherweise nicht. Daher wurde ebenfalls eine detached (allein stehend, abgelöst) Signatur eingeführt. Hierbei wird die Signatur in eine extra Datei geschrieben.

Signaturen erzeugen (Index)

gpg kennt nun drei Optionen um Signaturen zu erzeugen, diese werde ich hier an einem Beispiel erklären. Zuerst erzeuge ich die Datei date.txt die einfach nur die aktuelle Uhrzeit enthält und signiert werden soll:
date > date.txt nun erzeugen wir eine inline Signatur, (dazu werden wir nach der Passphrase gefragt):

gpg -s date.txt
Dies führt zu der Datei date.txt.gpg, die die komprimierte Signatur enthält, welche nicht im ASCII-Armor vorliegt, daher verwenden wir besser:
gpg -a -s date.txt
was zu date.txt.asc führt, die diesmal die Signatur im ASCII-Armor enthält.
Mit
gpg --clearsign date.txt erzeugt man ebenfalls eine Signatur, aber nicht komprimiert.

gpg -a -b date.txt erzeugt eine bereits erwähnte "detached signature" eignet sich also insbesondere für nicht-Text Dateien.

Signaturen verifizieren (Index)

Um eine Signatur zu prüfen, verwendet man die Option -v:
gpg -v date.txt.asc gpg erwartet hierbei das die zu prüfende Datei date.txt heißt, weicht dies von Namen der Signaturdatei ab, ist der Dateiname als dritte Option zu übergeben.






Die Signatur ist in Ordung. Es werden Schlüssel sowie Zeitpunkt der Signatur angezeigt.




date.txt wurde verändert, die Signatur ist demzufolge ungültig (BAD)

Eine Signatur, die in einer Extradatei (detached) untergebracht ist, wird über den gesamten Inhalt der signierten Datei erzeugt, eine alte Inline-Signatur gilt nur für die Teile einer Signatur, die von ihr eingegrenzt wurden.
Ein Beispiel:
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

It's backup day today so I'm pissed off.  Being the BOFH, however, does have
it's advantages.  I reassign null to be the tape device - it's so much more
economical on my time as I don't have to keep getting up to change tapes every
5 minutes.  And it speeds up backups too, so it can't be all bad.
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.4 (NetBSD)

iD8DBQFAh+8zEfTEHrP7rjMRAlImAKC1QHaXFlooGGHrV7LqJSx7zBIcqwCfQo2B
hWN9x3+f8TxK8n4KoVFgT9I=
=vHdA
-----END PGP SIGNATURE-----
	
Alle Zeilen, die sich vor BEGIN PGP SIGNED MESSAGE oder nach END PGP SIGNED MESSAGE befinden, zählen nicht zur signierten Eingabe und werden dementsprechend auch nicht geprüft! Dies ist bspw. in einer eMail der Fall für die Header, da diese ja erst von den Mailservern erweitert/verändert werden.

Noch ein Wort zu den eMails: die alte Form der Inlinesignatur ist heute veraltet und sollte nicht mehr eingesetzt werden. Üblicherweise wird nun PGP/MIME eingesetzt, d.h. der Inhalt der eMail (also der verfasste Text und evtl. Anhänge) werden als eigene Dateien verschickt über die die PGP-Signatur gebildet wird.

Daten verschlüsseln (Index)

gpg ermöglicht es Daten symmetrisch oder asymmetrisch zu verschlüsseln. Eine Datei lässt sich sehr einfach symmetrische verschlüsseln, d. h. das die verschlüsselte Datei nur entschlüsselt werden kann, wenn man Zugriff auf den verwendeten Schlüssel hat. Im Klartext heißt daß, das die Datei mit einem einfachen Passwort verschlüsselt wird und jeder der Zugriff auf das Passwort hat kann die Datei entschlüsseln.
Wir verwenden auch hierbei wieder die Option -a um den bekannten ASCII-Armor zu erzeugen.
ACHTUNG: man wird zweimal nach einer Passphrase gefragt, dies ist nicht die Passphrase des privaten Schlüssels, sondern eine neu zu vergebende Passphrase die für diese Datei gültig ist!
gpg -a -c date.txt Die Datei wird nun in date.txt.asc verschlüsselt abgelegt und kann auch von einem gpg, das keinerlei Keyrings enthält entschlüsselt werden.

Asymmetrische Verschlüsselung geschieht mit:
gpg -a -r 0xb3fbae33 -e date.txt mittels -r wird der Empfänger ausgewählt, nur derjenige, der Zugriff auf den entsprechenden privaten Schlüssel hat, kann date.txt.asc entschlüsseln.

Zusätzlich existiert noch eine Option um mehrere Dateien, die verschlüsselt werden sollen, anzugeben:
gpg -a -r 0xb3fbae33 --encrypt-files date.txt date2.txt date3.txt

Man sollte Dateien, die verschlüsselt werden, auch zusätzlich mit der Option -s signieren, um deren Integrität zu sichern. Entschlüsseln lassen sich Daten mit Übergabe der Option -d, man wird dann entweder nach der vergebenen Passphrase für die Datei oder des privaten Schlüssels gefragt.
gpg -d date.txt.asc

$Id: 2-arbeiten.html,v 1.3 2004/04/25 09:48:27 stefan Exp $