Wie schränke ich die Verwendungsflags für Primärschlüsselpaare in OpenPGP-Zertifikaten ein?

5

Ich habe mehrmals die Empfehlungen gelesen , das Primärschlüsselpaar in meinem OpenPGP-Zertifikat nur zum Signieren von Unterschlüsselpaaren und nicht für den allgemeinen täglichen Gebrauch zu verwenden (auch, um den privaten Schlüssel auf einem nicht netzwerkfähigen PC für zusätzliche Zwecke aufzubewahren) Sicherheit). Kürzlich ist mir aufgefallen, dass jedes Schlüsselpaar in meinem Zertifikat Flags enthält, die definieren, für welchen Zweck es ausschließlich verwendet werden darf. Soweit ich derzeit verstehe (Probleme beim Auffinden von Dokumentation), wird der Vorgang des Signierens von Unterschlüsselpaaren durch A(zur Authentifizierung) dargestellt.

In meinem neu generierten Zertifikat hat mein Primärschlüsselpaar die Verwendungskennzeichen SC(Signatur und Zertifizierung). Jetzt ist es ziemlich einfach, diese Flags für Unterschlüssel mit dem GnuPG-Befehlszeilentool zu ändern, aber ich kann keine Möglichkeit finden, die Verwendungsflags für das Primärschlüsselpaar zu ändern.

Ich möchte in der Lage sein, das Primärschlüsselpaar so einzuschränken, dass nur weitere Unterschlüsselpaare in meinem Zertifikat signiert und widerrufen werden können. Kann mir jemand sagen, ob dies möglich ist und wie es geht?

aef
quelle

Antworten:

6

Sie benötigen das Verwendungskennzeichen certify C, das von den OpenPGP-Spezifikationen sowieso benötigt wird. Die Authentifizierung Awird selten verwendet und bedeutet, dass Sie sich authentifizieren können (ähnlich wie bei der SSH-Schlüsselauthentifizierung).

Es ist jedoch nicht möglich, die Verwendungsflags in GnuPG zu ändern (aber durch Hacken des Codes ). Aus einer Nachricht von Resul Cetin in diesem Mailinglisten-Thread:

Ok, es war recht einfach zu machen (nicht sauber, aber es konnte auf schnelle und hackige Weise gemacht werden). Nur nach gnupg-1.4.9/g10/getkey.c:parse_key_usageund geändert pzu non-constund immer gesetzt (*p) &=~2;. Danach habe ich meinen neu kompilierten Hackish gestartet gpg --edit-keyund das Ablaufdatum meines Hauptschlüssels gesetzt. Nach diesem Vorgang hatte ich nur das Cert-Flag gesetzt. Danke Christoph - du bist mein persönlicher Held des Tages :)

Jens Erat
quelle
1
Das hat bei mir funktioniert.
Ivan Vučica
2

Um einen vorhandenen Hauptschlüssel zu ändern, wird in dem von Jens zitierten Thread gnupg-users die einzige Möglichkeit beschrieben, die ich bisher gesehen habe.

Es ist etwas einfacher, den Hauptschlüssel bei seiner Erstellung auf "Nur zertifizieren" zu setzen:

bash-3.2$ gpg --gen-key --expert
Please select what kind of key you want:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (sign only)
   (4) RSA (sign only)
   (7) DSA (set your own capabilities)
   (8) RSA (set your own capabilities)
Your selection? 8

Possible actions for a RSA key: Sign Certify Encrypt Authenticate 
Current allowed actions: Sign Certify Encrypt 

   (S) Toggle the sign capability
   (E) Toggle the encrypt capability
   (A) Toggle the authenticate capability
   (Q) Finished

Your selection? s

Possible actions for a RSA key: Sign Certify Encrypt Authenticate 
Current allowed actions: Certify Encrypt 

   (S) Toggle the sign capability
   (E) Toggle the encrypt capability
   (A) Toggle the authenticate capability
   (Q) Finished

Your selection? e

Possible actions for a RSA key: Sign Certify Encrypt Authenticate 
Current allowed actions: Certify 

   (S) Toggle the sign capability
   (E) Toggle the encrypt capability
   (A) Toggle the authenticate capability
   (Q) Finished

Your selection? q
RSA keys may be between 1024 and 16384 bits long.
What keysize do you want? (2048)   C-c C-c
gpg: Interrupt caught ... exiting

bash-3.2$ 

Sie müssen die Unterschlüssel anschließend jedoch manuell mit dem Befehl gpg --edit-key erstellen.

Ben
quelle
Wie erhältst du die Wahl von 16.384 Bits? Ich hatte den Eindruck, dass GnuPG RSA-Schlüssel auf maximal 4.096 Bit beschränkt.
Tyler Crompton
1
Das ist richtig. In meinem Fall ändere ich jedoch den Quellcode von Version 1.4.x, um dies hinzuzufügen, und ändere den erforderlichen sicheren Speicher, um größere Schlüsselgrößen zu verarbeiten. Dann einfach wie gewohnt neu kompilieren. Ich verwende jedoch keine Schlüssel über 4 KB für die Kommunikation (die sich in Abhängigkeit von der Akzeptanz von ECC und anderen Faktoren irgendwann ändern können). Diese Änderungen wirken sich also nur auf mich aus. Normalerweise erinnere ich mich daran, Beispiele wie das obige zu modifizieren, um die Standard-4096-Bits als obere Grenze anzugeben, aber in diesem Fall habe ich es klar vergessen.
Ben
@TylerCrompton Im Batch-Modus gibt es Optionen, um größere Schlüsselgrößen zu erhalten.
0xC0000022L
Ja, aber es gibt auch harte Grenzen im Quellcode. Wie auch immer, die meisten Menschen halten sich besser an die empfohlenen Best Practices. Ausnahmen wissen bereits, wer sie sind und warum für ihr Bedrohungsmodell die Ausnahme erforderlich ist.
Ben