Papildomi dešifravimo subklavišai (ADSK) su GnuPG

Papildomi dešifravimo subklavišai (ADSK) gali būti naudojami automatiškai pridėti gavėjus šifruojant žinutę su GnuPG. Tipiniai naudojimo atvejai

  • turėti vieną šifravimo raktą grupei ir nereikalauti, kad grupės nariai dalytųsi privačiuoju raktu,

  • prie šifravimo rakto pridedant atsarginį raktą, ir

  • nustatyti pagrindinį raktą, kuriuo galima iššifruoti kitų raktų pranešimus.

Pastaba

ADSK konfigūruoti reikia „GnuPG 2.4.1“ arba naujesnės versijos. Norint ADSK raktu užšifruoti pranešimą, reikia GnuPG 2.2.42 arba naujesnės versijos.

Apžvalga

Šiame vadove paaiškinama, kaip pridėti atsarginį raktą (naudotojo ID backup@example.com) kaip ADSK prie pagrindinio rakto (naudotojo ID main@example.com). Abu raktai saugomi „Nitrokey“ rakte. Tuos pačius veiksmus galima naudoti norint prie rakto pridėti kelis ADSK arba tą patį raktą kaip ADSK pridėti prie kelių kitų raktų.

Raktai paruošiami

Norėdami sukurti du raktus, vadovaukitės vienu iš šių vadovų:

Įsitikinkite, kad abu raktus galite išvardyti su gpg --list-keys, pavyzdžiui:

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

ADSK pridėjimas

Pirmiausia nustatykite atsarginės kopijos rakto šifravimo poskyrio pirštų atspaudą:

$ 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

Ieškokite eilutės, prasidedančios sub, kurioje yra raidė E, nurodanti šifravimo galimybę turintį subklavišą. Šio sub rakto pirštų atspaudas nurodytas kitoje eilutėje. Šiuo atveju pirštų atspaudas yra C1735CB29890EEDEABCF1D0DC9310F81D77519BC.

Tada nustatykite pagrindinio rakto pirštų atspaudus:

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

Jį rasite kitoje eilutėje po pub, šiuo atveju 55BC284C1D30D97638DA4A2C7963A4CD00C947CE.

Dabar galite pridėti ADSK naudodami --quick-add-adsk vėliavą:

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

Pirmasis argumentas yra pagrindinio rakto pirštų atspaudas. Antrasis argumentas yra atsarginio rakto šifravimo rakto poaibio pirštų atspaudas.

Galite patikrinti, ar ADSK sukurtas:

$ 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

ADSK yra R (riboto naudojimo) galimybę turintis subklavišas. Jis turi tą patį pirštų atspaudą, kaip ir atsarginio rakto šifravimo poaibis.

Dabar viešąjį raktą galite platinti su ADSK.

ADSK naudojimas

Užšifruojant žinutę pagrindiniu raktu, atsarginis raktas dabar automatiškai įtraukiamas kaip gavėjas. Vieninteliai tam keliami reikalavimai:

  • Pranešimo siuntėjas turi atnaujintą viešąjį raktą, kuriame yra ADSK.

  • Pranešimo siuntėjas naudoja GnuPG 2.2.42 arba naujesnę versiją.

Jei pridėsite --verbose vėliavą, galėsite patikrinti, kokiais raktais užšifruotas pranešimas:

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

Taip pat galite naudoti --list-packets parinktį užšifruotam pranešimui patikrinti:

$ 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

Kiekviena pubkey enc packet eilutė reiškia vieną raktą, kuriuo galima iššifruoti pranešimą.

ADSK atšaukimas

Jei atšauksite ADSK, šifruojant pranešimą jis nebebus įtrauktas kaip gavėjas. Norėdami atšaukti, atidarykite raktą naudodami 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>

Pasirinkite atšaukiamą rakto dalį naudodami key N. Pasirinktas pagalbinis raktas pažymėtas žvaigždute:

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>

Atšaukite pagalbinį raktą naudodami revkey ir išsaugokite pakeitimus naudodami 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

Dabar išplatinkite atnaujintą viešąjį raktą.

Pastaba

Atšaukimas įsigalios tik tada, kai siuntėjas atnaujins viešąjį raktą su atšauktu ADSK. Pranešimus, kurie jau buvo užšifruoti, vis tiek galima iššifruoti naudojant ADSK, net jei jis atšauktas.