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