Další podklíče pro dešifrování (ADSK) s GnuPG

Additional Decryption Subkeys (ADSK) lze použít k automatickému přidávání příjemců při šifrování zprávy pomocí GnuPG. Typické případy použití zahrnují

  • mít jeden šifrovací klíč pro skupinu bez nutnosti sdílení soukromého klíče mezi členy skupiny,

  • přidání záložního klíče k šifrovacímu klíči a

  • nastavení hlavního klíče, který může dešifrovat zprávy pro ostatní klíče.

Poznámka

Pro konfiguraci ADSK potřebujete GnuPG 2.4.1 nebo novější. Chcete-li šifrovat zprávu pro klíč ADSK, potřebujete GnuPG 2.2.42 nebo novější.

Přehled

Tento návod vysvětluje, jak přidat záložní klíč (ID uživatele backup@example.com) jako ADSK k hlavnímu klíči (ID uživatele main@example.com). Oba klíče jsou uloženy na klíči Nitrokey. Stejný postup lze použít k přidání více klíčů ADSK k jednomu klíči nebo k přidání stejného klíče jako ADSK k více jiným klíčům.

Příprava klíčů

Podle jednoho z těchto návodů vygenerujte dva klíče:

Ujistěte se, že můžete uvést oba klíče pomocí gpg --list-keys, napří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]

Přidání služby ADSK

Nejprve určete otisk šifrovacího podklíče pro záložní klíč:

$ 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

Vyhledejte řádek začínající sub, který obsahuje písmeno E, označující dílčí klíč s možností šifrování. Otisk tohoto dílčího klíče je uveden v dalším řádku. V tomto případě se jedná o otisk C1735CB29890EEDEABCF1D0DC9310F81D77519BC.

Poté určete otisk hlavního klíče:

$ 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 ji v dalším řádku za pub, v tomto případě 55BC284C1D30D97638DA4A2C7963A4CD00C947CE.

Nyní můžete přidat ADSK pomocí příznaku --quick-add-adsk:

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

Prvním argumentem je otisk hlavního klíče. Druhým argumentem je otisk šifrovacího podklíče záložního klíče.

Můžete zkontrolovat, zda byla vytvořena služba 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

Podklíč s možností R (restricted) je ADSK. Má stejný otisk prstu jako šifrovací podklíč záložního klíče.

Nyní můžete veřejný klíč distribuovat pomocí ADSK.

Použití ADSK

Při šifrování zprávy pro hlavní klíč je nyní záložní klíč automaticky přidán jako příjemce. Jedinými požadavky jsou:

  • Odesílatel zprávy má aktuální veřejný klíč, který obsahuje ADSK.

  • Odesílatel zprávy používá GnuPG 2.2.42 nebo novější.

Pokud přidáte příznak --verbose, můžete zkontrolovat klíče, kterými je zpráva zašifrována:

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

Pro kontrolu šifrované zprávy můžete také použít volbu --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ý řádek pubkey enc packet představuje jeden klíč, kterým lze zprávu dešifrovat.

Zrušení ADSK

Pokud ADSK odvoláte, nebude již přidán jako příjemce při šifrování zprávy. Chcete-li provést odvolání, otevřete klíč pomocí 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>

Pomocí key N vyberte dílčí klíč, který chcete zrušit. Vybraný dílčí klíč je označen hvězdič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>

Odeberte podklíč pomocí revkey a poté uložte změny pomocí 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

Nyní distribuujte aktualizovaný veřejný klíč.

Poznámka

Odvolání se stane účinným až poté, co odesílatel aktualizuje veřejný klíč s odvolaným ADSK. Zprávy, které již byly zašifrovány, mohou být dešifrovány pomocí ADSK i v případě jeho odvolání.