Schon bei der Erstellung eines Schlüssels wird der GnuPG Anwender mit den Namen dreier Algorithmen konfrontiert. Er hat die Auswahl zwischen DSA, ElGamal und RSA. Den einfachsten und schnellsten Überblick, was GnuPG alles zur Verfügung stellt, bekommt der GnuPG Anwender nach Eingabe des Kommandos gpg --version:
* Nur mit IDEA Kryptomodul.
Die unter Öff. Schlüssel aufgeführten Algorithmen sind Public-Key oder asymmetrische Algorithmen, die entweder der Verschlüsselung dienen wie RSA, RSA-E(ncrypt-only) und ELG(Elgamal)-E(ncrypt-only) oder der Signierung wie DSA, RSA und RSA-S(ign-only).
Die unter Verschlü. aufgeführten Algorithmen sind symmetrische Algorithmen, mit denen ein einmaliger Sitzungsschlüssel verschlüsselt wird. Mit den nach Hash: aufgeführten Algorithmen werden eindeutige Prüfsummen, auch Message Digests genannt, zu Daten erzeugt. Mit den Kompressionsalgorithmen ZIP, ZLIB oder BZIP2 werden Daten komprimiert.
Zum Beispiel wird bei der Verschlüsselung und zusätzlichen Signierung einer E-Mail über den Textkörper mit einer der Hashalgorithmen eine Prüfsumme gebildet. Diese Prüfsumme bzw. der Message Digest wird mit dem privaten Schlüssel des Absenders per Public-Key Algorithmus DSA, RSA oder RSA-S verschlüsselt. Text und Signatur werden anschließend mit einem der Kompressionsalgorithmen komprimiert. Kompression verringert die Nachrichtengröße und erschwert Angriffe. Danach wird von GnuPG mittels einer der symmetrischen Algorithmen und Zufallsdaten ein einmaliger Situngsschlüssel, Sessionkey genannt, gebildet, mit dem das Nachrichtenpaket verschlüsselt wird. Anschließend wird dieser Sitzungsschlüssel mit dem öffentlichen Schlüssel des Empfängers per Public-Key Algorithmus RSA, RSA-E oder Elgamal verschlüsselt und ggf. zum Ende das Endresultat mit einer ASCII-Umhüllung "eingepackt".
Auch bei der Erzeugung eines Schlüssels wirken bereits symmetrische und Hash Algorithmen mit.
Die Informationen, welche Algorithmen man selbst bevorzugt, werden im Eigenzertifikat eines Schlüssels gespeichert und über den öffentlichen Schlüssel auch an den Kommunikationspartner als Benutzer des Schlüssels weitergereicht. Auch nachträgliche Änderungen dieser Informationen sind mit GnuPG möglich.
Gut sichtbar werden die Präferenzen, wenn man sich mit pgpdump Schlüsseldatei oder dem Kommando gpg --list-packets Schlüsseldatei den Inhalt des Eigenzertifikat-Pakets eines exportierten öffentlichen Schlüssels anzeigen lässt:
Signature Packet(tag 2)(573 bytes)
Ver 4 - new
Sig type - Positive certification of a User ID and Public Key packet(0x13).
Präferenzen des Schlüsselbesitzers zu symmetrischen Algorithmen:
Hashed Sub: preferred symmetric algorithms(sub 11)(8 bytes)
Sym alg - Twofish with 256-bit key(sym 10)
Sym alg - AES with 256-bit key(sym 9)
Sym alg - AES with 192-bit key(sym 8)
Sym alg - AES with 128-bit key(sym 7)
Sym alg - Triple-DES(sym 2)
Sym alg - Blowfish(sym 4)
Sym alg - CAST5(sym 3)
Sym alg - IDEA(sym 1)
Präferenzen des Schlüsselbesitzers zu Hash Algorithmen:
Hashed Sub: preferred hash algorithms(sub 21)(4 bytes)
Hash alg - SHA256(hash 8)
Hash alg - RIPEMD160(hash 3)
Hash alg - SHA1(hash 2)
Hash alg - MD5(hash 1)
Präferenzen des Schlüsselbesitzers zu Kompression Algorithmen:
Hashed Sub: preferred compression algorithms(sub 22)(3 bytes)
Comp alg - BZip2(comp 3)
Comp alg - ZLIB <RFC1950>(comp 2)
Comp alg - ZIP <RFC1951>(comp 1)
In der Ausgabe der Algorithmen mit gpg --version und auch in der obigen Anzeige von pgpdump fallen die alphanumerischen Kürzel Sn oder sym n, Hn oder hash n und Zn oder comp n auf.
Dabei handelt es sich um interne Identifizierungsplatzhalter oder IDs der OpenPGP Spezifikation, deren Zuordnung und Bedeutung bekannt sein muss, wenn man die Präferenzen festlegen, ändern oder mit den Präferenzen des Kommunikationspartners abstimmen will. Deshalb folgt im Verlauf eine Übersicht in tabellarischer Form, die der OpenPGP Spezifikation entnommen ist.
Mit Hilfe von besonderen Optionen in der GnuPG Konfigurationsdatei gpg.conf kann man GnuPG sowohl mitteilen, welche eigenen Präferenzen zu Algorithmen abweichend von den Präferenzen des Schlüsselbesitzers bestehen, als auch einen Ausgleich zwischen den Präferenzen, die im öffentlichen Schlüssel des Schlüsselbesitzers gespeichert sind und den eigenen Präferenzen herbeiführen.
Es wird sich mancher GnuPG Anwender fragen, welche Algorithmen aus der Vielzahl an Algorithmen als "sicherer" anzusehen sind, welchen Algorithmus man bevorzugen sollte.
Eine allgemeingültige Antwort auf diese Fragen gibt es nicht, weil jeder der oben aufgeführten Algorithmen von den Autoren der OpenPGP Spezifikation und den Programmierern von OpenPGP Anwendungen wie GnuPG und PGP als sichere Algorithmen eingestuft wurden und deshalb auch Bestandteil der OpenPGP Spezifikation sind.
Ohne Modifikation der Präferenzen seitens des GnuPG Anwenders werden in einem neuen Schlüssel die Präferenzen in folgenden Reihenfolgen von GnuPG gesetzt:
AES steht an erster Stelle, weil AES, der Rijndael Algorithmus des Advanced Encryption Standard nach einem Ausscheidungsverfahren, an dem eine Vielzahl von Algorithmen beteiligt waren, vom NIST zum offiziellen Verschlüsselungsstandard in den USA erklärt wurde. SHA1 steht an erster Stelle, weil SHA1, der Secure Hash Algorithmus Bestandteil des US Secure Hash Standards (SHS) ist und DSA Schlüssel eng mit SHA1 verknüpft sind.
Zur Aufgabe eines Kryptographieanwenders gehört es, bei Meldungen und Nachrichten zu Schwächen von oder Angriffen auf Algorithmen auf Websites, in Mailinglisten oder Newslettern aufmerksam zu werden, um ggf. die eigenen Präferenzen anzupassen.
Abweichend von der OpenPGP Spezifikation werden die Algorithmen so benannt, wie sie auch von GnuPG bezeichnet werden, um die Orientierung zu erleichtern.
| 1 | RSA (Verschlüsseln oder Signieren) |
| 2 | RSA-E (nur Verschlüsseln) |
| 3 | RSA-S (nur Signieren) |
| 16 | ELG-E (Elgamal - nur Verschlüsseln) |
| 17 | DSA (Digital Signature Algorithm) |
| 18 | Elliptic Curve (reserviert) |
| 19 | ECDSA (Elliptic Curve Digital Signature Algorithm) (reserviert) |
| 20 | (reserviert) |
| 21 | Diffie-Hellman (X9.42, IETF-S/MIME) (reserviert) |
| 100-110 | private/experimentelle Algorithmen |
| 0 | Klartext |
| 1 | IDEA (128-bit) |
| 2 | 3DES (Triple-DES 168[von 192]-bit) |
| 3 | CAST5 (128-bit) |
| 4 | BLOWFISH (128-bit) |
| 5 | (reserviert) |
| 6 | (reserviert) |
| 7 | AES128 (128-bit) |
| 8 | AES192 (192-bit) |
| 9 | AES256 (256-bit) |
| 10 | TWOFISH (256-bit) |
| 100-110 | private/experimentelle Algorithmen |
| 0 | unkomprimiert |
| 1 | ZIP (RFC 1951) |
| 2 | ZLIB (RFC 1950) |
| 3 | BZIP2 (BZ2) |
| 100-110 | private/experimentelle Algorithmen |
| 1 | MD5 |
| 2 | SHA1 |
| 3 | RIPEMD160 |
| 4 | (reserviert) |
| 5 | (reserviert) |
| 6 | (reserviert) |
| 7 | (reserviert) |
| 8 | SHA256 |
| 9 | SHA384 |
| 10 | SHA512 |
| 100-110 | private/experimentelle Algorithmen |
| Die Links zu den verschiedenen Algorithmen verweisen zumeist auf entsprechende Artikel der deutschsprachigen Wikipedia Enzyklopädie, über die man sich näher zu den Algorithmen informieren kann. Ergänzend kann man sich die Seite Informationen und Empfehlungen zur Schlüsselgröße und Kryptografische Verfahren bei GnuPG durchlesen. |
| Schlüssel | Hash |
|---|---|
| 1024 | 160 |
| 2048 | 224 |
| 2048 | 256 |
| 3072 | 256 |
| Schlüssel | Hash |
|---|---|
| 1024 | 160 (SHA-1) |
| 2048 | 224 (SHA-224) |
| 3072 | 256 (SHA-256) |
Wie bereits oben gesagt, werden die Präferenzen im Eigenzertifikat eines Schlüssels gespeichert. Die Standardpräferenzen, die GnuPG ohne Beeinflussung durch den GnuPG Anwender setzt, können von diesem jederzeit geändert werden.
Vorgehensweise
Set preference list to:
Verschlü.: TWOFISH, AES256, AES192, AES, CAST5, 3DES
Digest: SHA256, SHA1, RIPEMD160
Komprimierung: ZLIB, ZIP, nicht komprimiert
Es folgt eine Abfrage zur Versicherung:Speichert automatisch diese Liste der Präferenzen im Eigenzertifikat jedes neu erstellten Schlüssels.
Außerdem wird bei bereits vorliegenden Schlüsseln diese Liste verwendet, wenn man wie oben den Schlüssel bearbeitet, aber den Befehl setpref… auslässt und sofort updpref eingibt.
Die drei Optionen zur Angabe der persönlich bevorzugten Algorithmen zur symmetrischen Verschlüsselung, für Hashes (Message Digests) und Kompression, für die man einfach die Angaben der default-preference-list auf die drei Optionen verteilen kann, dienen dem Abgleich der eigenen Präferenzen mit den Präferenzen eines fremden Schlüssels, mit dem man z. B. eine E-Mail verschlüsselt.
Der Empfänger der E-Mail kann ja andere Vorlieben haben als man selbst oder eine OpenPGP Anwendung verwenden, die nicht alle Algorithmen unterstützt. Auf der anderen Seite möchte man die eigenen Präferenzen berücksichtigt wissen.
GnuPG besitzt dafür einen intelligenten Mechanismus, der die Liste der Präferenzen im öffentlichen Schlüssel des Empfängers auf Übereinstimmung mit den Präferenzen abgleicht, die man mit den drei Optionen festgelegt hat. Aus beiden Listen bildet GnuPG eine neue Liste der Algorithmen, die beide Schlüssel gemeinsam haben und verwendet diese für die Verschlüsselung und Erzeugung von Message Digests.
Bestimmte Algorithmen werden verwendet oder nicht verwendet, wenn man eine der pgpN Optionen setzt, um kompatibel zu einer bestimmten PGP Version zu verschlüsseln.
Das Gegenteil zum Abgleich von fremden und eigenen Präferenzen und die permanente Festlegung auf einen einzelnen Algorithmus bedeutet die Nutzung dieser Optionen.
Entsprechende Präferenzen fremder Schlüssel finden bei Verwendung einer der Optionen keine Berücksichtigung.
Sie sollten nicht in der Standardkonfigurationsdatei gpg.conf angegeben werden, sondern GnuPG direkt als Option --typ-algo Name per Kommandozeile oder mit der Option --options Konfigdatei in einer gesonderten Konfigurationsdatei übergeben werden, wenn ein bestimmter Algorithmus für einen besonderen Zweck verwendet werden soll.
Geben die in den Listen der persönlich bevorzugten Algorithmen an erster Stelle angegebenen Algorithmen die Algorithmen wieder, die man mit den typ-algo Name Optionen setzen würde, erübrigen sich die typ-algo Name Optionen ganz.
Steht z. B. mit personal-cipher-preferences S10… TWOFISH an erster Stelle, wird TWOFISH auch bei einer rein symmetrischen Verschlüsslung mit gpg -c verwendet.
Die beiden Optionen beeinflussen, wenn zusätzlich die Listen der persönlichen Präferenzen genutzt werden, nur die Erstellung von Schlüsseln mit der Einschränkung, dass GnuPG z. Z. für s2k-digest-algo immer SHA-1 verwendet, was den Schutz der Passphrase bei neuen Schlüsseln angeht.
Werden keine persönlichen Präferenzen mit den Listen festgelegt, bestimmen die beiden Optionen auch, welche Algorithmen bei der konventionellen (symmetrischen) Verschlüsselung von Dateien verwendet werden.
S2K ist die Abkürzung für "String-to-Key Spezifikator". Damit sind die Bestandteile Passphrase, Hash und Salt (Zufallsdaten) gemeint, aus denen zusammen mit einem symmetrischen Algorithmus ein Schlüssel gebildet wird.
Mit der ersten Option wird bestimmt, mit welchem symmetrischen Algorithmus der private Schlüssel geschützt wird, die zweite Option bestimmt, mit welchem Hash Algorithmus die Passphrase zu symmetrischen Schlüsseln konvertiert wird.