GnuPG
Inhaltsverzeichnis
-
GnuPG
- Was kann man damit machen?
- Public Key und Private Key
- Wie funktioniert Verschlüsselung?
- Wie funktioniert Signatur?
- Web of Trust
-
Die wichtigsten Befehle zur Hand
- Key-Paar erzeugen
- Revocation Certificates erzeugen.
- Public Key auf Keyserver hochladen
- Key vernichten
- Einen Text signieren
- Eine Signatur prüfen
- Einen Text verschlüsseln
- Einen Text entschlüsseln
- Signieren und Verschlüsseln eines Textes
- Einen verschüsselten und signierten Text entschlüsseln und die Signatur prüfen
- Email-Verschlüsselung
- Programme mit GnuPG Unterstützung
Was kann man damit machen?
Mit GnuPG kann man zwei Dinge tun:
Daten signieren, sodaß ein Leser feststellen kann, ob sie verändert worden sind
Daten verschlüsseln, sodaß nur ausgewählte Personen diese Daten lesen können
GnuPG kann symmetrische Verschlüsselung benutzen. Das ist der einfachste Fall von Verschlüsselung. Hier wird einfach ein Password abgefragt und damit werden die Daten verschlüsselt.
Public Key und Private Key
Die Hauptaufgabe von GnuPG ist es aber, asymmetrische Verschlüsselung zu betreiben. Dieses Verfahren basiert darauf, daß sich jede Person ein Schlüssel-Paar erzeugt. Die eine Hälfte des Schlüssels wird symmetrisch verschlüsselt lokal gespeichert und muß geheimgehalten werden. (Wegen dieser symmetrischen Verschlüsselung braucht man übrigens das Password, wenn man etwas mit sog. private key machen will!). Die andere Schlüsselhälfte, public key genannt, veröffentlicht man auf Keyservern. Ihre einzige Aufgabe ist es, für jeden abrufbar alle public keys zu speichern.
Wie funktioniert Verschlüsselung?
Wenn eine Datei verschlüsselt werden soll, so gibt man die public keys aller Empfänger (also der Personen, die später die Datei lesen können sollen) an. Mit diesen Schlüsselhälften wird anschließend die Datei verschlüsselt (TODO: session key). Alle Empfänger können die Datei später mit ihrem private key, also dem Gegenstück des zur Verschlüsselung benutzten public keys) entschlüsseln.
Wie funktioniert Signatur?
Zuerst wird über die Datei eine Prüfsumme ermittelt. Diese hat die Eigenschaft, sich komplett zu ändern, wenn man nur ein einziges Bit der Datei ändert. Die Prüfsumme wird nun mit dem private key des Signierenden verschlüsselt, das Ergebnis an die zu signierende Datei gehängt.
Alle, die nun die Signatur (und damit die Unverändertheit) des Dokuments prüfen wollen, können die angehängte Signatur mit dem public key des Signierenden entschlüsseln. Die nun wieder lesbare Prüfsumme wird zum Schluß mit einer neuerrechneten Prüfsumme verglichen. Sind beide gleich, ist das Dokument unverändert; weichen sie voneinander ab, so wurde das Dokument verändert.
Web of Trust
Mit diesem (GnuPG) und ähnlichen Programmen (PGP...) ist ein Weg eröffnet, eine nicht staatlich kontrollierte, aber trotzdem eindeutige digitale Signatur zu einem leicht nutzbaren Teil der EDV-Welt zu machen. Nach dem Erzeugen eines eigenen Schlüssels fehlt nur noch ein letzter Schritt: die eindeutige Zuordnung der Person/des Schlüssel-Inhabers zu dem Schlüssel.
Diesen Schritt bietet der Heise-Verlag: Unter http://www.heise.de/security/dienste/pgp/ erreicht man die Krypto-Kampagne, bei der ein Abgleich zwischen Person, Personalausweis und Schlüssel erfolgt. Nach Abschluss der Prozedur ist der Schlüsselinhaber eindeutig seiner digitalen Signatur zugeordnet.
Die wichtigsten Befehle zur Hand
Wenn GnuPG nicht zur Email-Verschlüsselung eingesetzt wird, dann kann man es natürlich auch per Hand aufrufen
Key-Paar erzeugen
Bevor man GnuPG wirklich einsetzen kann, muß man sich ein Schlüssel-Paar erzeugen:
$ gpg --gen-key
Nachdem der Key (mit Standard-Einstellungen, vielleicht eine etwas größere Bit-Länge des Keys...) erzeugt ist, werden einige Infos angezeigt:
pub 1024D/93F81F4F 2003-02-27 sdkjfh asdfk (sdfsdf) <ssdf@sdf.dd> Key fingerprint = CB83 38EE 2390 90DD ABA9 46B7 428F 1E20 93F8 1F4F sub 1024g/C596B600 2003-02-27
Die sogenannte "KeyID" ist die hexadezimale Zahlenfolge, die in der "pub"-Zeile zu finden ist, also in unserem Beispiel "93F81F4F". Wenn man mit GnuPG arbeitet und eine KeyID angeben soll, so sollte man immer "0x" davorschreiben, damit GnuPG die KeyID von anderen, eventuell zulässigen Eingaben unterschieden kann: "0x93F81F4F"
Revocation Certificates erzeugen.
Damit kann man einen Key für ungültig erklären, z.B., wenn man ihn nicht mehr nutzen will, oder das Password vergessen hat, oder ein Dritter an den geheimen Teil und das Password gekommen ist, oder...
Erstmal sollte man sich einen kurzen Überblick darüber schaffen, welche Certificates es gibt
$ gpg --gen-revoke 0x93F81F4F
Danach sollte man für die gängigen Fälle ("Ich will nicht mehr", "Private key abhandengekommen", "Password vergessen", "Password ist an Dritte gelangt") revocation certificates erzeugen:
$ gpg --gen-revoke 0x93F81F4F > gpg-rev-Will_no_longer_use_it $ gpg --gen-revoke 0x93F81F4F > gpg-rev-Lost_private_key $ gpg --gen-revoke 0x93F81F4F > gpg-rev-Forgot_password $ gpg --gen-revoke 0x93F81F4F > gpg-rev-Key_compromised
Die entstehenden Dateien sollte man sorgfältig aufbewahren. Ich empfehle Ausdruck als Hexcode:
$ cat gpg-rev-Will_no_longer_use_it | od -t x1 | lp $ cat gpg-rev-Lost_private_key | od -t x1 | lp $ cat gpg-rev-Forgot_password | od -t x1 | lp $ cat gpg-rev-Key_compromised | od -t x1 | lp
Die Zettel kann man sicher in einen Tresor packen und die Daten können so nicht an Dritte gelangen, die damit (ohne weitere Passwords) den Key vernichten können! Nach dem Ausdruck sollten die Dateien auf dem Rechner in jedem Fall gelöscht werden; eine Kopie auf Diskette, zu den Zetteln gelegt, kann jedoch nicht schaden.
Public Key auf Keyserver hochladen
Damit man verschlüsselte Texte von anderen bekommen kann, müssen diese an den öffentlichen Teil des Keys kommen. Dazu sollte man diesen zweckmäßigerweise auf die Keyserver hochladen; diese tauschen sich untereinander aus, sodaß es reichen sollte, den Key auf einen Keyserver zu laden:
$ gpg --keyserver wwwkeys.de.pgp.net --send-keys 0xKeyID
Möchte man immer einen Keyserver benutzen können, z.B., um automatisch fehlende public keys aus dem Internet herunterladen zu können, so kann man das in der Datei ~/.gnupg/options konfigurieren:
echo "keyserver wwwkeys.de.pgp.net" >> ~/.gnupg/options
Key vernichten
Sollte ein Grund aufkommen, den Key zu vernichten (man will ihn nicht länger nutzen, Password vergessen, ...), so muß man das (passende) Revocation Certificate laden. Dieses kann auf jedem beliebigen Rechner geschehen, der private key wird dazu nicht gebraucht:
$ gpg --recv-keys 0xKeyID $ gpg --import gpg-rev-Lost_private_key $ gpg --send-keys 0xKeyID
Damit ist der Key unbrauchbar für weitere produktive Benutzung. Er kann (unter Ausgabe einer Warnung) aber immernoch benutzt werden, um alte Texte zu entschlüsseln.
Einen Text signieren
$ gpg --armor --detach-sign SignMe
Die Datei "SignMe" bleibt erhalten und es entsteht zusätzlich eine Datei namens "SignMe.asc", in der die Signatur enthalten ist.
Eine Signatur prüfen
$ cat SignedFile | gpg --verify SignedFile.asc
oder
$ gpg --verify SignedFile.asc < SignedFile
Einen Text verschlüsseln
$ gpg --armor --encrypt --recipient Identifer EncryptMe
Die Datei "EncryptMe" wird verschlüsselt, es entsteht eine verschlüsselte Datei "EncryptMe.asc". Die Original-Datei bleibt erhalten und kann nun ggf. gelöscht werden. Die Option "--recipient" kann mehrfach benutzt werden, dadurch können mehrere Personen diese verschlüsselte Datei lesen. Achtung - wenn man sich selbst nicht auf die Liste der Empgänger setzt, so kann man den Text selbst nicht mehr wiederherstellen!
Damit man automatisch immer in der Liste der Empfänger steht, sollte man sich entsprechend eintragen:
$ echo "encrypt-to 0xKeyID" >> ~/.gnupg/options
Einen Text entschlüsseln
$ gpg --decrypt EncryptedText.asc > ReadableText
Signieren und Verschlüsseln eines Textes
$ gpg --armor --sign --encrypt --recipient Identifer SignAndEncryptMe
Es entsteht wieder eine Datei namens "SignAndEncryptMe.asc", die das Produkt enthält.
Einen verschüsselten und signierten Text entschlüsseln und die Signatur prüfen
$ gpg SignedAndEncrypted.asc
Das Ergebnis wird in die Datei "SignedAndEncrypted" geschrieben.
Email-Verschlüsselung
Gerade die digitale Signatur, aber ab und zu auch die Verschlüsselung, läßt sich gut in Mail-Programme integrieren, sodaß Emails gegen Veränderung geschützt sind und man weiß, woher sie wirklich stammt (so kann man sicher sein, daß der gerade eingegangene Auftrag auch wirklich von dem kommt, der sich als Absender der Email zu erkennen gegeben hat:-)
Programme mit GnuPG Unterstützung
Mailprogramme
- ((füge dein Lieblingsmailer hier ein))