Dodatočné podkľúče na dešifrovanie (ADSK) s GnuPG

Additional Decryption Subkeys (ADSK) možno použiť na automatické pridávanie príjemcov pri šifrovaní správy pomocou GnuPG. Typické prípady použitia zahŕňajú

  • mať jeden šifrovací kľúč pre skupinu bez potreby zdieľania súkromného kľúča medzi členmi skupiny,

  • pridanie záložného kľúča k šifrovaciemu kľúču a

  • nastavenie hlavného kľúča, ktorý môže dešifrovať správy pre iné kľúče.

Poznámka

Na konfiguráciu ADSK potrebujete GnuPG 2.4.1 alebo novšiu verziu. Ak chcete šifrovať správu pre kľúč ADSK, potrebujete GnuPG 2.2.42 alebo novšiu verziu.

Prehľad

Táto príručka vysvetľuje, ako pridať záložný kľúč (ID používateľa backup@example.com) ako ADSK k hlavnému kľúču (ID používateľa main@example.com). Oba kľúče sú uložené na kľúči Nitrokey. Rovnaké kroky možno použiť na pridanie viacerých ADSK ku kľúču alebo na pridanie toho istého kľúča ako ADSK k viacerým iným kľúčom.

Príprava kľúčov

Pri generovaní dvoch kľúčov postupujte podľa jedného z týchto návodov:

Uistite sa, že oba kľúče môžete uviesť pomocou gpg --list-keys, napríklad:

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

Pridanie ADSK

Najprv určte odtlačok šifrovacieho podkľúča pre záložný kľúč:

$ 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

Vyhľadajte riadok začínajúci na sub, ktorý obsahuje písmeno E, označujúce podkľúč s možnosťou šifrovania. Odtlačok tohto podkľúča je uvedený v ďalšom riadku. V tomto prípade je odtlačok C1735CB29890EEDEABCF1D0DC9310F81D77519BC.

Potom určte odtlačok hlavného kľúč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]

Nájdete ho v nasledujúcom riadku za pub, v tomto prípade 55BC284C1D30D97638DA4A2C7963A4CD00C947CE.

Teraz môžete pridať ADSK pomocou príznaku --quick-add-adsk:

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

Prvým argumentom je odtlačok hlavného kľúča. Druhým argumentom je odtlačok prsta šifrovacieho podkľúča záložného kľúča.

Môžete skontrolovať, či bola vytvorená ADSK:

$ 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

Podkľúč s R (obmedzená) schopnosť je ADSK. Má rovnaký odtlačok prsta ako šifrovací podkľúč záložného kľúča.

Teraz môžete verejný kľúč distribuovať pomocou ADSK.

Používanie ADSK

Pri šifrovaní správy pre hlavný kľúč sa teraz záložný kľúč automaticky pridá ako príjemca. Jediné požiadavky na to sú:

  • Odosielateľ správy má aktuálny verejný kľúč, ktorý obsahuje ADSK.

  • Odosielateľ správy používa GnuPG 2.2.42 alebo novšiu verziu.

Ak pridáte príznak --verbose, môžete skontrolovať kľúče, ktorými je správa zašifrovaná:

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

Na kontrolu zašifrovanej správy môžete použiť aj možnosť --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

Každý riadok pubkey enc packet predstavuje jeden kľúč, ktorý môže dešifrovať správu.

Zrušenie ADSK

Ak zrušíte ADSK, pri šifrovaní správy sa už nebude pridávať ako príjemca. Ak chcete vykonať odvolanie, otvorte kľúč pomocou 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>

Vyberte podklíč, ktorý chcete zrušiť, pomocou key N. Vybraný podkľúč je označený hviezdičkou:

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>

Odvolajte podkľúč pomocou revkey a potom uložte zmeny pomocou 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

Teraz distribuujte aktualizovaný verejný kľúč.

Poznámka

Odvolanie sa stane účinným až po tom, ako odosielateľ aktualizuje verejný kľúč s odvolaným ADSK. Správy, ktoré už boli zašifrované, sa dajú dešifrovať pomocou ADSK aj po jeho odvolaní.