Subchei de decriptare suplimentare (ADSK) cu GnuPG

Additional Decryption Subkeys (ADSK) poate fi folosit pentru a adăuga automat destinatari la criptarea unui mesaj cu GnuPG. Cazurile tipice de utilizare includ

  • existența unei singure chei de criptare pentru un grup, fără a fi necesară partajarea cheii private între membrii grupului,

  • adăugarea unei chei de rezervă la o cheie de criptare și

  • stabilirea unei chei principale care poate decripta mesaje pentru alte chei.

Notă

Pentru a configura un ADSK, aveți nevoie de GnuPG 2.4.1 sau o versiune mai nouă. Pentru a cripta un mesaj pentru o cheie cu o ADSK, aveți nevoie de GnuPG 2.2.42 sau o versiune mai nouă.

Prezentare generală

Acest ghid explică modul în care se adaugă o cheie de rezervă (ID utilizator backup@example.com) ca ADSK la o cheie principală (ID utilizator main@example.com). Ambele chei sunt stocate pe o Nitrokey. Aceiași pași pot fi utilizați pentru a adăuga mai multe ADSK la o cheie sau pentru a adăuga aceeași cheie ca ADSK la mai multe alte chei.

Pregătirea cheilor

Urmați unul dintre aceste ghiduri pentru a genera cele două chei:

Asigurați-vă că puteți lista ambele chei cu gpg --list-keys, de exemplu:

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

Adăugarea unei ADSK

Determinați mai întâi amprenta digitală a subcheie de criptare pentru cheia de rezervă:

$ 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

Căutați linia care începe cu sub și care conține litera E, indicând o subcheie cu capacitate de criptare. Amprenta acestei subclave este listată în rândul următor. În acest caz, amprenta este C1735CB29890EEDEABCF1D0DC9310F81D77519BC.

Apoi se determină amprenta digitală a cheii principale:

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

Îl puteți găsi în următoarea linie după pub, în acest caz 55BC284C1D30D97638DA4A2C7963A4CD00C947CE.

Acum puteți adăuga ADSK folosind steagul --quick-add-adsk:

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

Primul argument este amprenta digitală a cheii principale. Al doilea argument este amprenta digitală a subcheie de criptare a cheii de rezervă.

Puteți verifica dacă ADSK a fost creat:

$ 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

Subcheia cu capacitatea R (restricționată) este ADSK. Aceasta are aceeași amprentă digitală ca și subcheia de criptare a cheii de rezervă.

Acum puteți distribui cheia publică cu ADSK.

Utilizarea unei ADSK

La criptarea unui mesaj pentru cheia principală, cheia de rezervă este acum adăugată automat ca destinatar. Singurele cerințe în acest sens sunt:

  • Expeditorul mesajului are o cheie publică actualizată care include ADSK.

  • Expeditorul mesajului utilizează GnuPG 2.2.42 sau o versiune mai nouă.

Dacă adăugați indicatorul --verbose, puteți verifica cheile cu care este criptat mesajul:

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

De asemenea, puteți utiliza opțiunea --list-packets pentru a verifica un mesaj criptat:

$ 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

Fiecare linie pubkey enc packet reprezintă o cheie care poate decripta mesajul.

Revocarea unei ADSK

Dacă revocați un ADSK, acesta nu va mai fi adăugat ca destinatar la criptarea unui mesaj. Pentru a efectua o revocare, deschideți cheia cu 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>

Selectați cheia secundară care urmează să fie revocată cu key N. Subcheia selectată este marcată cu un asterisc:

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>

Revocați cheia secundară cu revkey și apoi salvați modificările cu 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

Acum distribuiți cheia publică actualizată.

Notă

Revocarea va intra în vigoare numai după ce expeditorul a actualizat cheia publică cu ADSK revocată. Mesajele care au fost deja criptate pot fi în continuare decriptate cu ADSK chiar dacă aceasta este revocată.