die raven homepage
Deutsche GnuPG Anleitung / Anhang 2: Algorithmen
Algorithmen im Überblick

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:

Unterstützte Verfahren:
Öff.Schlüssel: RSA, RSA-E, RSA-S, ELG-E, DSA
Verschlü.: IDEA (S1)*, 3DES (S2), CAST5 (S3), BLOWFISH (S4), AES (S7), AES192 (S8), AES256 (S9), TWOFISH (S10)
Hash: MD5 (H1), SHA1 (H2), RIPEMD160 (H3), SHA256 (H8), SHA384 (H9), SHA512 (H10), SHA224 (H11)
Komprimierung: nicht komprimiert (Z0), ZIP (Z1), ZLIB (Z2), BZIP2 (Z3)

* 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.

Algorithmen im Einsatz

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.

Algorithmen bevorzugen

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.

Sichere Algorithmen?

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:

  • Symmetrisch: AES-256 - AES-192 - AES-128 - CAST5 - Triple-DES
  • Hash: SHA1 - SHA256 - RIPEMD160
  • Kompression: ZLIB - BZip2 - ZIP

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.

Tabellen der Algorithmen laut OpenPGP Spezifikation

Abweichend von der OpenPGP Spezifikation werden die Algorithmen so benannt, wie sie auch von GnuPG bezeichnet werden, um die Orientierung zu erleichtern.

Public-Key Algorithmen
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
Symmetrische Algorithmen (S)
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
Kompression Algorithmen (Z)
0 unkomprimiert
1 ZIP (RFC 1951)
2 ZLIB (RFC 1950)
3 BZIP2 (BZ2)
100-110 private/experimentelle Algorithmen
Hash Algorithmen (H)
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


Notiz 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.
Anmerkungen
  • Der symmetrische IDEA Algorithmus, der bei GnuPG extern eingebunden wird, sollte aus patentrechtlichen Gründen nicht, bzw. nicht bevorzugt verwendet werden. Zudem wird IDEA nur noch benötigt, weil PGP 2.6.X nur IDEA einsetzt. Mit BLOWFISH, CAST5, AES-128 stehen Alternativen mit gleicher Schlüssellänge zur Verfügung, mit TWOFISH, AES-256 und AES-192 Algorithmen mit größerer Schlüssellänge.
  • Die SHA Hashalgorithmen und der RIPE-MD Hashalgorithmus sind im Vergleich zu MD5 resistenter gegen Angriffe. MD5 wird nur noch benötigt, weil PGP 2.6.X nur MD5 einsetzt. Laut OpenPGP Spezifikation ist MD5 als veraltet eingestuft. MD5 sollte nicht mehr verwendet werden.
  • Ab GnuPG Version 1.4.0 wird SHA256, SHA384 und SHA512 sowohl schreibend als auch lesend unterstützt, setzt aber lange Signierschlüssel voraus.
  • DSA Signierschlüssel weisen in GnuPG eine Länge von 1024 bis 3072-bit auf, was den Vorgaben des Digital Signature Standard (DSS) FIPS-186 enspricht. RSA Signierschlüssel sind in GnuPG auf maximal 4096-bit begrenzt.

    Im März 2006 veröfentlichte das NIST einen ersten Entwurf des FIPS 186-3, der für den DSA drei Schlüssellängen mit korrespondierenden Hashgrößen definiert:
    DSA Schlüssellängen und Hashgrößen in Bits nach FIPS-186-3
    Schlüssel Hash
    1024 160
    2048 224
    2048 256
    3072 256

    Für RSA Hauptsignierschlüssel definiert FIPS-186-3 folgende Schlüssellängen mit Hashgrößen (nach SP 800-57) und Hashalgorithmen nach FIPS 186-2:

    Schlüssel Hash
    1024 160 (SHA-1)
    2048 224 (SHA-224)
    3072 256 (SHA-256)
  • Ab GnuPG Version 1.4.0 kann BZIP2 sowohl schreibend als auch lesend eingesetzt werden. Die schreibende Anwendung von BZIP2 bereitet u. U. anderen OpenPGP Implementationen Probleme.
  • Elliptic Curve Cryptography (ECC) für asymmetrische Algorithmen ist ein im Vergleich zu anderen Public-Key Algorithmen neueres Verfahren, das auf Elliptischen Kurven und dem gleichen mathematischen Problem ("Discrete Logarithm Problem") basiert wie beim Digital Signature Algorithmus (DSA) und Elgamal, aber komplexer ist. ECC bietet im Vergleich zu RSA kleinere Schlüssellängen bei gleicher Stärke und geringerem Rechenaufwand. In den USA werden u. a. der US-Geheimdienst NSA und das US-Verteidigungsminsterium die Verschlüsselung von Dokumenten und des Datenverkehrs ihrer Netzwerke langfristig auf ECC umstellen.

    Der Einsatz von ECC mit GnuPG wird im Rahmen des ECCGnuPG Projekts erprobt. Zur Standardisierung von ECC für OpenPGP gibt es den IETF Internet Draft ECC in OpenPGP.
Festlegen und ändern bevorzugter Algorithmen

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

  1. gpg --edit-key Key-ID
    Ruft den Bearbeitungsmodus auf.
  2. Befehl> showpref
    Zeigt die aktuellen Präferenzen mit Nennung der verwendeten Algorithmen an:

    Verschlü.: AES256, AES192, AES, CAST5, 3DES
    Digest: SHA1, SHA256, RIPEMD160
    Komprimierung: ZLIB, BZIP2, ZIP, nicht komprimiert
    Eigenschaften: MDC, Keyserver no-modify

    Befehl> pref
    Zeigt die aktuellen Präferenzen mit Nennung der Algorithmen-IDs an:

    S9 S8 S7 S3 S2 H2 H8 H3 Z2 Z3 Z1 [mdc] [no-ks-modify]
  3. Befehl> setpref S(1-10) H(1-3) Z(1-2)

    oder

    Befehl> setpref S-Name H-Name Z-Name

    Setzt die Präferenzen neu (man orientiere sich bei der Eingabe an der Ausgabeform von pref und der Algorithmen-Tabelle).

    Soll beispielsweise IDEA nicht mehr unterstützt, TWOFISH als primärer Algorithmus und SHA256 hinzugefügt werden, würde die Befehlseingabe so aussehen:

    Befehl> setpref S10 S9 S8 S7 S3 S2 H8 H2 H3 Z2 Z1

    oder

    Befehl> setpref TWOFISH AES256 AES192 AES192 CAST5 3DES SHA256 SHA1 ZLIB ZIP
  4. Befehl> updpref
    Aktualisiert die gespeicherten Präferenzen mit der neuen Reihenfolge.

    Danach zeigt GnuPG die zukünftigen Präferenzen an:
    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:
    Really update the preferences? (y/N) y

    Und nach Eingabe der Passphrase werden die Änderungen vorgenommen.
  5. Befehl> save
    Speichert die vorgenommenen Änderungen.
Optionen für die Konfigurationsdatei gpg.conf
default-preference-list S(1-10) H(1-3) Z(1-2)

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.

personal-cipher-preferences S(1-10)
personal-digest-preferences H(1-4)
personal-compress-preferences Z(1-2)

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.

cipher-algo Name
digest-algo Name
compress-algo Name

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.

s2k-cipher-algo Name
s2k-digest-algo Name

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.

[ Inhalt | Top | Zurück | Weiter ]