it-swarm.com.de

Kurze OpenPGP-Schlüssel-IDs sind unsicher. Wie kann GnuPG so konfiguriert werden, dass stattdessen lange Schlüssel-IDs verwendet werden?

Kurze OpenPGP-Schlüssel-IDs (mit 32 Bit/8 Hex-Zeichen) unterliegen Kollisionsangriffen . Es wird dringend empfohlen, keine 32-Bit-IDs mehr zu verwenden :

Verwenden Sie keine 32-Bit-Schlüssel-IDs mehr

Es dauert 4 Sekunden, um eine kollidierende 32-Bit-Schlüssel-ID auf einer GPU zu generieren (mit scallion ). Schlüsselserver überprüfen die hochgeladenen Schlüssel nur wenig und erlauben Schlüssel mit kollidierenden 32-Bit-IDs. Darüber hinaus verwendet GPG 32-Bit-Schlüssel-IDs in der gesamten Benutzeroberfläche und warnt Sie nicht, wenn eine Operation möglicherweise auf mehrere Schlüssel angewendet wird.

Aber wie kann ich GnuPG anweisen, lange IDs (mit 64 Bit oder 16 Hex-Zeichen) zu verwenden?

36
Jens Erat

Wie die Fingerabdruck- und Lang- und Kurzschlüssel-IDs zusammenhängen

Jedem OpenPGP-Schlüssel ist ein Fingerabdruck zugeordnet, der hauptsächlich aus seinem öffentlichen Schlüsselpaket berechnet wird, das auch die Erstellungszeit enthält. Die Berechnung ist definiert in RFC 4880, OpenPGP, 12.2. Schlüssel-IDs und Fingerabdrücke .

Es gibt kurze und lange Schlüssel-IDs, die den unteren 32 bzw. 64 Bit des Fingerabdrucks ähneln. Beispiel: Sehen Sie sich die IDs meines OpenPGP-Schlüssels an:

fingerprint: 0D69 E11F 12BD BA07 7B37  26AB 4E1F 799A A4FF 2279
long id:                                    4E1F 799A A4FF 2279
short id:                                             A4FF 2279

Fingerabdrücke und Schlüssel-IDs werden verwendet, da das Teilen und Vergleichen eines ganzen Schlüssels mit normalerweise 1024 bis 8096 Bit (Hinzufügen von mehr für Header wie das Erstellungsdatum) sehr unpraktisch.

Verwenden von Long Key IDs

Wenn Sie OpenPGP-Schlüssel angeben, können Sie nicht nur kurze Schlüssel-IDs, sondern auch lange Schlüssel-IDs und sogar ganze Fingerabdrücke übergeben. Anstatt die Kurzschlüssel-ID zu übergeben

gpg --recv-keys A4FF2279

sie können jederzeit die lange Schlüssel-ID schreiben

gpg --recv-keys 4E1F799AA4FF2279

oder sogar den vollständigen Fingerabdruck (empfohlen für Skripte und ähnliche Zwecke)

gpg --recv-keys 0D69E11F12BDBA077B3726AB4E1F799AA4FF2279

Drucken langer Schlüssel-IDs

Aber woher soll man die lange Schlüssel-ID nehmen? Wenn jemand seinen kurzen Ausweis übergeben hat, können Sie nur versuchen, alle Schlüssel für diesen Ausweis abzurufen und festzustellen, ob eine Kollision vorliegt (und hoffen, dass niemand den echten Schlüssel vor Ihnen versteckt und nur den gefälschten ausgibt).

Wenn Sie also Ihre OpenPGP-Schlüssel-ID übergeben, geben Sie die lange ID bekannt! Sie können GnuPG ganz einfach drucken lassen, indem Sie die Option --keyid-format long Hinzufügen:

gpg --keyid-format long --list-keys [email protected]

Diese Option verwendet die Werte short oder 0xshort Für Kurzschlüssel-IDs (ohne oder mit dem Präfix 0x, Um anzuzeigen, dass es sich um eine Hexadezimalzahl handelt) und long oder 0xlong Für lange Schlüssel-IDs.

Konfigurieren langer Schlüssel-IDs als Standard

Um sicherzustellen, dass GnuPG immer die lange Schlüssel-ID druckt, fügen Sie die Option zu Ihrer ~/.gnupg/gpg.conf - Datei hinzu und entfernen Sie den -- . Zum Beispiel habe ich GnuPG so konfiguriert, dass immer die 0x - vorangestellte lange Schlüssel-ID durch Hinzufügen einer Zeile gedruckt wird

keyid-format 0xlong

Fingerabdruck drucken

Leider können Sie GnuPG nicht so einstellen, dass der gesamte Fingerabdruck auf diese Weise gedruckt wird, wahrscheinlich weil dies das Ausgabeformat von GnuPG für so ziemlich jede Bildschirmgröße beschädigen würde. Fordern Sie es stattdessen an, indem Sie es ausführen

gpg --fingerprint 4E1F799AA4FF2279

das wird so etwas wie Dump

pub   8192R/0x4E1F799AA4FF2279 2012-12-25
      Key fingerprint = 0D69 E11F 12BD BA07 7B37  26AB 4E1F 799A A4FF 2279

Da dies den Nachteil hat, dass Leerzeichen enthalten sind (schlecht für die Verwendung in Skripten), können Sie stattdessen die durch Doppelpunkte getrennte maschinenlesbare Ausgabe verwenden:

gpg --with-colons --fingerprint 4E1F799AA4FF2279

Verwenden Sie zusätzlich grep und cut, um alles außer dem Fingerabdruck zu filtern:

gpg --with-colons --fingerprint 4E1F799AA4FF2279 | grep fpr | cut -d ':' -f 10
51
Jens Erat