Ytterligare dekrypteringsundernycklar (ADSK) med GnuPG#
Additional Decryption Subkeys (ADSK) kan användas för att automatiskt lägga till mottagare när ett meddelande krypteras med GnuPG. Typiska användningsfall inkluderar
ha en enda krypteringsnyckel för en grupp utan att behöva dela den privata nyckeln mellan gruppens medlemmar,
lägga till en reservnyckel till en krypteringsnyckel, och
skapa en huvudnyckel som kan dekryptera meddelanden för andra nycklar.
Observera
För att konfigurera en ADSK behöver du GnuPG 2.4.1 eller nyare. För att kryptera ett meddelande för en nyckel med en ADSK behöver du GnuPG 2.2.42 eller nyare.
Översikt#
Den här guiden förklarar hur du lägger till en reservnyckel (användar-ID backup@example.com
) som en ADSK till en huvudnyckel (användar-ID main@example.com
). Båda nycklarna lagras på en Nitrokey. Samma steg kan användas för att lägga till flera ADSK till en nyckel, eller för att lägga till samma nyckel som en ADSK till flera andra nycklar.
Förberedelse av nycklarna#
Följ en av dessa guider för att generera de två nycklarna:
Se till att du kan lista båda nycklarna med gpg --list-keys
, till exempel:
$ 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]
Lägga till en ADSK#
Bestäm först fingeravtrycket för krypteringsundernyckeln för reservnyckeln:
$ 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
Leta efter raden som börjar med sub
och som innehåller bokstaven E
, vilket indikerar en undernyckel med krypteringsfunktion. Fingeravtrycket för denna undernyckel listas på nästa rad. I det här fallet är fingeravtrycket C1735CB29890EEDEABCF1D0DC9310F81D77519BC
.
Fastställ sedan huvudnyckelns fingeravtryck:
$ 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]
Du hittar den på nästa rad efter pub
, i det här fallet 55BC284C1D30D97638DA4A2C7963A4CD00C947CE
.
Nu kan du lägga till ADSK med hjälp av --quick-add-adsk
flaggan:
$ gpg --quick-add-adsk \
55BC284C1D30D97638DA4A2C7963A4CD00C947CE \
C1735CB29890EEDEABCF1D0DC9310F81D77519BC
Det första argumentet är fingeravtrycket för huvudnyckeln. Det andra argumentet är fingeravtrycket för krypteringsundernyckeln för reservnyckeln.
Du kan kontrollera att ADSK har skapats:
$ 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
Den undernyckel som har kapaciteten R
(restricted) är ADSK. Den har samma fingeravtryck som krypteringsundernyckeln för reservnyckeln.
Nu kan du distribuera den offentliga nyckeln med ADSK.
Använda en ADSK#
Vid kryptering av ett meddelande för huvudnyckeln läggs nu reservnyckeln automatiskt till som mottagare. De enda kraven för detta är:
Avsändaren av meddelandet har en aktuell offentlig nyckel som innehåller ADSK.
Avsändaren av meddelandet använder GnuPG 2.2.42 eller nyare.
Om du lägger till flaggan --verbose
kan du kontrollera de nycklar som meddelandet är krypterat till:
$ 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>"
Du kan också använda alternativet --list-packets
för att kontrollera ett krypterat meddelande:
$ 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
Varje rad i pubkey enc packet
representerar en nyckel som kan dekryptera meddelandet.
Återkalla en ADSK#
Om du återkallar en ADSK kommer den inte längre att läggas till som mottagare vid kryptering av ett meddelande. Om du vill återkalla en nyckel öppnar du den med 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>
Välj den undernyckel som ska återkallas med key N
. Den valda undernyckeln är markerad med en asterisk:
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>
Återkalla undernyckeln med revkey
och spara sedan ändringarna med 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
Distribuera nu den uppdaterade publika nyckeln.
Observera
Återkallelsen träder i kraft först när avsändaren har uppdaterat den publika nyckeln med den återkallade ADSK. Meddelanden som redan har krypterats kan fortfarande dekrypteras med ADSK även om den har återkallats.