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

(Nitrokey 3 - Linux)

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í.