= GnuPG = <> == 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) 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 "S''''''ignMe" bleibt erhalten und es entsteht zusätzlich eine Datei namens "S''''''ignMe.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 "E''''''ncryptMe" wird verschlüsselt, es entsteht eine verschlüsselte Datei "E''''''ncryptMe.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 "S''''''ignAndEncryptMe.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 "S''''''ignedAndEncrypted" 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 == * [[http://www.mutt.org/|mutt]] * [[http://www.ximian.com/products/evolution/|Evolution]] * [[http://kmail.kde.org/|KMail]] * [[http://www.mozilla.org/products/thunderbird/|Thunderbird]] * ((füge dein Lieblingsmailer hier ein)) == Fontends == * [[http://www.gnupg.org/related_software/gpa/|GNU Privacy Assistant]]