Extra ontcijferingssleutels (ADSK) met GnuPG

Additional Decryption Subkeys (ADSK) kan gebruikt worden om automatisch ontvangers toe te voegen bij het versleutelen van een bericht met GnuPG. Typische gebruikssituaties zijn

  • het hebben van een enkele coderingssleutel voor een groep zonder de noodzaak om de privésleutel te delen tussen de leden van de groep,

  • een reservesleutel toevoegen aan een coderingssleutel, en

  • het opzetten van een hoofdsleutel die berichten voor andere sleutels kan ontsleutelen.

Notitie

Om een ADSK te configureren hebt u GnuPG 2.4.1 of nieuwer nodig. Om een bericht te versleutelen voor een sleutel met een ADSK hebt u GnuPG 2.2.42 of nieuwer nodig.

Overzicht

In deze handleiding wordt uitgelegd hoe je een reservesleutel (gebruikers-ID backup@example.com) als ADSK toevoegt aan een hoofdsleutel (gebruikers-ID main@example.com). Beide sleutels zijn opgeslagen op een Nitrokey. Dezelfde stappen kunnen worden gebruikt om meerdere ADSK aan een sleutel toe te voegen, of om dezelfde sleutel als een ADSK aan meerdere andere sleutels toe te voegen.

De sleutels voorbereiden

Volg een van deze gidsen om de twee sleutels te genereren:

Zorg ervoor dat je beide sleutels kunt opnoemen met gpg --list-keys, bijvoorbeeld:

$ 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]

Een ADSK toevoegen

Bepaal eerst de vingerafdruk van de coderingssubkey voor de reservesleutel:

$ 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

Zoek naar de regel die begint met sub die de letter E bevat, wat wijst op een subsleutel met de versleutelingsmogelijkheid. De fingerprint van deze subsleutel staat in de volgende regel. In dit geval is de vingerafdruk C1735CB29890EEDEABCF1D0DC9310F81D77519BC.

Bepaal dan de vingerafdruk van de hoofdsleutel:

$ 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]

Je kunt het vinden in de volgende regel na pub, in dit geval 55BC284C1D30D97638DA4A2C7963A4CD00C947CE.

Nu kun je de ADSK toevoegen met de --quick-add-adsk vlag:

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

Het eerste argument is de vingerafdruk van de hoofdsleutel. Het tweede argument is de vingerafdruk van de coderingssubkey van de reservesleutel.

Je kunt controleren of de ADSK is gemaakt:

$ 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

De subsleutel met de R (beperkte) mogelijkheid is de ADSK. Deze heeft dezelfde vingerafdruk als de versleutelingssubsleutel van de back-upsleutel.

Nu kun je de publieke sleutel distribueren met de ADSK.

Een ADSK gebruiken

Bij het versleutelen van een bericht voor de hoofdsleutel wordt de reservesleutel nu automatisch toegevoegd als ontvanger. De enige vereisten hiervoor zijn:

  • De afzender van het bericht heeft een actuele openbare sleutel die de ADSK bevat.

  • De verzender van het bericht gebruikt GnuPG 2.2.42 of nieuwer.

Als je de vlag --verbose toevoegt, kun je de sleutels controleren waarmee het bericht is versleuteld:

$ 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>"

Je kunt ook de optie --list-packets gebruiken om een versleuteld bericht te controleren:

$ 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

Elke regel op pubkey enc packet vertegenwoordigt een sleutel die het bericht kan ontsleutelen.

Een ADSK intrekken

Als je een ADSK intrekt, zal deze niet langer worden toegevoegd als ontvanger bij het versleutelen van een bericht. Om een intrekking uit te voeren, open je de sleutel met 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>

Selecteer de subsleutel die u wilt intrekken met key N. De geselecteerde subsleutel is gemarkeerd met een sterretje:

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>

Trek de subsleutel in met revkey en sla de wijzigingen op met 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

Distribueer nu de bijgewerkte openbare sleutel.

Notitie

De intrekking wordt pas van kracht als de afzender de openbare sleutel heeft bijgewerkt met de ingetrokken ADSK. Berichten die al zijn versleuteld, kunnen nog steeds worden ontsleuteld met de ADSK, zelfs als deze is ingetrokken.