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.