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

(Nitrokey 3 - Windows)

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.