Dodatni podključi za dešifriranje (ADSK) z GnuPG

Additional Decryption Subkeys (ADSK) lahko uporabite za samodejno dodajanje prejemnikov pri šifriranju sporočila z GnuPG. Tipični primeri uporabe vključujejo

  • en sam šifrirni ključ za skupino, ne da bi bilo treba zasebni ključ deliti med člani skupine,

  • dodajanje rezervnega ključa šifrirnemu ključu in

  • vzpostavitev glavnega ključa, ki lahko dešifrira sporočila za druge ključe.

Opomba

Za konfiguracijo ADSK potrebujete GnuPG 2.4.1 ali novejšo različico. Za šifriranje sporočila za ključ z ADSK potrebujete GnuPG 2.2.42 ali novejšo različico.

Pregled

V tem priročniku je pojasnjeno, kako rezervni ključ (ID uporabnika backup@example.com) kot ADSK dodate glavnemu ključu (ID uporabnika main@example.com). Oba ključa sta shranjena na ključu Nitrokey. Iste korake lahko uporabite za dodajanje več ključev ADSK enemu ključu ali za dodajanje istega ključa kot ADSK več drugim ključem.

Priprava ključev

Za ustvarjanje dveh ključev sledite enemu od teh vodnikov:

Prepričajte se, da lahko oba ključa navedete s gpg --list-keys, na primer:

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

Dodajanje ADSK

Najprej določite prstni odtis podključa za šifriranje za varnostni ključ:

$ 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

Poiščite vrstico, ki se začne z sub in vsebuje črko E, ki označuje podključ z možnostjo šifriranja. Prstni odtis tega podključa je naveden v naslednji vrstici. V tem primeru je prstni odtis C1735CB29890EEDEABCF1D0DC9310F81D77519BC.

Nato določite prstni odtis glavnega ključa:

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

Najdete ga v naslednji vrstici za pub, v tem primeru 55BC284C1D30D97638DA4A2C7963A4CD00C947CE.

Zdaj lahko ADSK dodate z uporabo zastavice --quick-add-adsk:

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

Prvi argument je prstni odtis glavnega ključa. Drugi argument je prstni odtis šifrirnega podključa rezervnega ključa.

Preverite lahko, ali je bil ADSK ustvarjen:

$ 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

Podključ z zmožnostjo R (omejeno) je ADSK. Ima enak prstni odtis kot podključ za šifriranje varnostnega ključa.

Zdaj lahko javni ključ distribuirate s programom ADSK.

Uporaba ADSK

Ko šifrirate sporočilo za glavni ključ, je rezervni ključ zdaj samodejno dodan kot prejemnik. Edine zahteve za to so:

  • Pošiljatelj sporočila ima posodobljen javni ključ, ki vključuje ADSK.

  • Pošiljatelj sporočila uporablja GnuPG 2.2.42 ali novejšo različico.

Če dodate zastavico --verbose, lahko preverite ključe, s katerimi je sporočilo šifrirano:

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

Za preverjanje šifriranega sporočila lahko uporabite tudi možnost --list-packets:

$ 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

Vsaka vrstica pubkey enc packet predstavlja en ključ, ki lahko dešifrira sporočilo.

Preklic ADSK

Če ADSK prekličete, se pri šifriranju sporočila ne bo več dodal kot prejemnik. Če želite izvesti preklic, ključ odprite s programom 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>

Podključ, ki ga želite preklicati, izberite s key N. Izbrani podključ je označen z zvezdico:

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>

Podključ prekličite s revkey in nato shranite spremembe s 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

Posodobljeni javni ključ razpošljite.

Opomba

Preklic začne veljati šele, ko pošiljatelj posodobi javni ključ s preklicanim ADSK. Sporočila, ki so že bila šifrirana, je mogoče dešifrirati z ADSK, tudi če je ta preklican.