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