Zusätzliche Entschlüsselungsunterschlüssel (ADSK) mit GnuPG#

Zusätzliche Entschlüsselungsunterschlüssel (ADSK) können verwendet werden, um automatisch Empfänger hinzuzufügen, wenn eine Nachricht mit GnuPG verschlüsselt wird. Typische Anwendungsfälle sind

  • einen einzigen Verschlüsselungsschlüssel für eine Gruppe zu haben, ohne dass der private Schlüssel zwischen den Mitgliedern der Gruppe ausgetauscht werden muss,

  • Hinzufügen eines Backup-Schlüssels zu einem Verschlüsselungsschlüssel, und

  • Einrichtung eines Hauptschlüssels, der Nachrichten für andere Schlüssel entschlüsseln kann.

Bemerkung

Um einen ADSK zu konfigurieren, benötigen Sie GnuPG 2.4.1 oder eine neuere Version. Um eine Nachricht für einen Schlüssel mit einem ADSK zu verschlüsseln, benötigen Sie GnuPG 2.2.42 oder eine neuere Version.

Übersicht#

In dieser Anleitung wird erklärt, wie Sie einen Backup-Schlüssel (Benutzer-ID backup@example.com) als ADSK zu einem Hauptschlüssel (Benutzer-ID main@example.com) hinzufügen. Beide Schlüssel sind auf einem Nitrokey gespeichert. Dieselben Schritte können verwendet werden, um mehrere ADSK zu einem Schlüssel hinzuzufügen, oder um denselben Schlüssel als ADSK zu mehreren anderen Schlüsseln hinzuzufügen.

Vorbereiten der Schlüssel#

Folgen Sie einer dieser Anleitungen, um die beiden Schlüssel zu erzeugen:

Stellen Sie sicher, dass Sie beide Schlüssel mit gpg --list-keys auflisten können, zum Beispiel:

$ gpg --list-keys main@example.com backup@example.com
pub   ed25519 2023-07-04 [SC]
      55BC284C1D30D97638DA4A2C7963A4CD00C947CE
uid           [ultimate] Main Key <main@example.com>
sub   ed25519 2023-07-04 [A]
sub   cv25519 2023-07-04 [E]

pub   ed25519 2023-07-04 [SC]
      5271152B531F7FFD8787818251FB75800E281241
uid           [ultimate] Backup Key <backup@example.com>
sub   ed25519 2023-07-04 [A]
sub   cv25519 2023-07-04 [E]

Hinzufügen eines ADSK#

Ermitteln Sie zunächst den Fingerabdruck des Verschlüsselungsunterschlüssels für den Sicherungsschlüssel:

$ gpg --list-keys --with-subkey-fingerprints backup@example.com
pub   ed25519 2023-07-04 [SC]
      5271152B531F7FFD8787818251FB75800E281241
uid           [ultimate] Backup Key <backup@example.com>
sub   ed25519 2023-07-04 [A]
      7AEA1A0EC7BD66FF03AFEFAC8F243D8EC7678FCC
sub   cv25519 2023-07-04 [E]
      C1735CB29890EEDEABCF1D0DC9310F81D77519BC

Suchen Sie die Zeile, die mit sub beginnt und den Buchstaben E enthält, der auf einen Unterschlüssel mit der Verschlüsselungsfunktion hinweist. Der Fingerabdruck dieses Unterschlüssels ist in der nächsten Zeile aufgeführt. In diesem Fall lautet der Fingerabdruck C1735CB29890EEDEABCF1D0DC9310F81D77519BC.

Bestimmen Sie dann den Fingerabdruck des Hauptschlüssels:

$ gpg --list-keys main@example.com
pub   ed25519 2023-07-04 [SC]
      55BC284C1D30D97638DA4A2C7963A4CD00C947CE
uid           [ultimate] Main Key <main@example.com>
sub   ed25519 2023-07-04 [A]
sub   cv25519 2023-07-04 [E]

Sie finden ihn in der nächsten Zeile nach pub, in diesem Fall 55BC284C1D30D97638DA4A2C7963A4CD00C947CE.

Jetzt können Sie den ADSK mit der --quick-add-adsk Flagge hinzufügen:

$ gpg --quick-add-adsk \
      55BC284C1D30D97638DA4A2C7963A4CD00C947CE \
      C1735CB29890EEDEABCF1D0DC9310F81D77519BC

Das erste Argument ist der Fingerabdruck des Hauptschlüssels. Das zweite Argument ist der Fingerabdruck des Verschlüsselungsunterschlüssels des Sicherungsschlüssels.

Sie können überprüfen, ob der ADSK erstellt wurde:

$ gpg --list-keys --with-subkey-fingerprints main@example.com
pub   ed25519 2023-07-04 [SC]
      55BC284C1D30D97638DA4A2C7963A4CD00C947CE
uid           [ultimate] Main Key <main@example.com>
sub   ed25519 2023-07-04 [A]
      9DF42A789DA4E848295C529634E35A6897DFABFD
sub   cv25519 2023-07-04 [E]
      1DFD6EA8D8B88BEA063ADB4BD75708BAF0CD49C8
sub   cv25519 2023-07-04 [R]
      C1735CB29890EEDEABCF1D0DC9310F81D77519BC

Der Unterschlüssel mit der Fähigkeit R (eingeschränkt) ist der ADSK. Er hat denselben Fingerabdruck wie der Verschlüsselungsunterschlüssel des Sicherungsschlüssels.

Jetzt können Sie den öffentlichen Schlüssel mit dem ADSK weitergeben.

Verwendung eines ADSK#

Beim Verschlüsseln einer Nachricht für den Hauptschlüssel wird nun automatisch der Backup-Schlüssel als Empfänger hinzugefügt. Die einzigen Voraussetzungen dafür sind:

  • Der Absender der Nachricht verfügt über einen aktuellen öffentlichen Schlüssel, der den ADSK enthält.

  • Der Absender der Nachricht verwendet GnuPG 2.2.42 oder eine neuere Version.

Wenn Sie das --verbose Flag hinzufügen, können Sie die Schlüssel überprüfen, mit denen die Nachricht verschlüsselt ist:

$ echo message | gpg --verbose --encrypt --armor --recipient main@example.com > /tmp/msg.asc
gpg: using pgp trust model
gpg: using subkey D75708BAF0CD49C8 instead of primary key 7963A4CD00C947CE
gpg: automatically retrieved 'main@example.com' via Local
gpg: This key belongs to us
gpg: reading from '[stdin]'
gpg: writing to stdout
gpg: ECDH/AES256 encrypted for: "D75708BAF0CD49C8 Main Key <main@example.com>"
gpg: ECDH/AES256 encrypted for: "C9310F81D77519BC Main Key <main@example.com>"

Sie können auch die Option --list-packets verwenden, um eine verschlüsselte Nachricht zu prüfen:

$ gpg --pinentry-mode cancel --list-packets /tmp/msg.asc | grep "pubkey enc packet"
:pubkey enc packet: version 3, algo 18, keyid D75708BAF0CD49C8
:pubkey enc packet: version 3, algo 18, keyid C9310F81D77519BC

Jede Zeile pubkey enc packet steht für einen Schlüssel, mit dem die Nachricht entschlüsselt werden kann.

Entzug eines ADSK#

Wenn Sie einen ADSK widerrufen, wird er beim Verschlüsseln einer Nachricht nicht mehr als Empfänger hinzugefügt. Um einen Widerruf durchzuführen, öffnen Sie den Schlüssel mit gpg --edit-key:

$ gpg --edit-key main@example.com

sec  ed25519/7963A4CD00C947CE
     created: 2023-07-04  expires: never       usage: SC
     card-no: FFFE 5E0E868D
     trust: ultimate      validity: ultimate
ssb  ed25519/34E35A6897DFABFD
     created: 2023-07-04  expires: never       usage: A
     card-no: FFFE 5E0E868D
ssb  cv25519/D75708BAF0CD49C8
     created: 2023-07-04  expires: never       usage: E
     card-no: FFFE 5E0E868D
ssb  cv25519/C9310F81D77519BC
     created: 2023-07-04  expires: never       usage: R
[ultimate] (1). Main Key <main@example.com>

Wählen Sie den zu widerrufenden Unterschlüssel mit key N. Der ausgewählte Unterschlüssel ist mit einem Sternchen markiert:

gpg> key 2

sec  ed25519/7963A4CD00C947CE
     created: 2023-07-04  expires: never       usage: SC
     card-no: FFFE 5E0E868D
     trust: ultimate      validity: ultimate
ssb  ed25519/34E35A6897DFABFD
     created: 2023-07-04  expires: never       usage: A
     card-no: FFFE 5E0E868D
ssb  cv25519/D75708BAF0CD49C8
     created: 2023-07-04  expires: never       usage: E
     card-no: FFFE 5E0E868D
ssb* cv25519/C9310F81D77519BC
     created: 2023-07-04  expires: never       usage: R
[ultimate] (1). Main Key <main@example.com>

Widerrufen Sie den Unterschlüssel mit revkey und speichern Sie dann die Änderungen mit save:

gpg> revkey
Do you really want to revoke this subkey? (y/N) y
Please select the reason for the revocation:
  0 = No reason specified
  1 = Key has been compromised
  2 = Key is superseded
  3 = Key is no longer used
  Q = Cancel
Your decision? 0
Enter an optional description; end it with an empty line:
>
Reason for revocation: No reason specified
(No description given)
Is this okay? (y/N) y


sec  ed25519/7963A4CD00C947CE
     created: 2023-07-04  expires: never       usage: SC
     card-no: FFFE 5E0E868D
     trust: ultimate      validity: ultimate
ssb  ed25519/34E35A6897DFABFD
     created: 2023-07-04  expires: never       usage: A
     card-no: FFFE 5E0E868D
ssb  cv25519/D75708BAF0CD49C8
     created: 2023-07-04  expires: never       usage: E
     card-no: FFFE 5E0E868D
ssb  cv25519/C9310F81D77519BC
     created: 2023-07-04  revoked: 2023-07-04  usage: R
[ultimate] (1). Main Key <main@example.com>

gpg> save

Verteilen Sie nun den aktualisierten öffentlichen Schlüssel.

Bemerkung

Der Widerruf wird erst wirksam, wenn der Absender den öffentlichen Schlüssel mit dem widerrufenen ADSK aktualisiert hat. Nachrichten, die bereits verschlüsselt wurden, können mit dem ADSK entschlüsselt werden, auch wenn er widerrufen wurde.