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:
doc:openpgp-keygen-auf-Gerät
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.