Sottochiavi di decrittazione aggiuntive (ADSK) con GnuPG¶
✓ |
⨯ |
⨯ |
⨯ |
⨯ |
✓ |
✓ |
✓ |
Additional Decryption Subkeys (ADSK) può essere usato per aggiungere automaticamente dei destinatari quando si cripta un messaggio con GnuPG. I casi d’uso tipici includono
avere un’unica chiave di crittografia per un gruppo senza la necessità di condividere la chiave privata tra i membri del gruppo,
aggiungere una chiave di backup a una chiave di crittografia e
impostare una chiave principale in grado di decifrare i messaggi di altre chiavi.
Nota
Per configurare un ADSK, è necessario GnuPG 2.4.1 o più recente. Per crittografare un messaggio per una chiave con un ADSK, è necessario GnuPG 2.2.42 o più recente.
Panoramica¶
Questa guida spiega come aggiungere una chiave di backup (ID utente backup@example.com
) come ADSK a una chiave principale (ID utente main@example.com
). Entrambe le chiavi sono memorizzate su una Nitrokey. Gli stessi passaggi possono essere utilizzati per aggiungere più ADSK a una chiave o per aggiungere la stessa chiave come ADSK a più chiavi.
Preparazione delle chiavi¶
Seguite una di queste guide per generare le due chiavi:
Assicurarsi di poter elencare entrambe le chiavi con gpg --list-keys
, ad esempio:
$ 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]
Aggiunta di un ADSK¶
Determinare innanzitutto l’impronta digitale della sottochiave di crittografia per la chiave di backup:
$ 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
Cercare la riga che inizia con sub
e che contiene la lettera E
, che indica una sottochiave con capacità di crittografia. L’impronta digitale di questa sottochiave è elencata nella riga successiva. In questo caso, l’impronta digitale è C1735CB29890EEDEABCF1D0DC9310F81D77519BC
.
Quindi determinare l’impronta digitale della chiave 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]
Si trova nella riga successiva a pub
, in questo caso 55BC284C1D30D97638DA4A2C7963A4CD00C947CE
.
Ora si può aggiungere l’ADSK usando il flag --quick-add-adsk
:
$ gpg --quick-add-adsk \
55BC284C1D30D97638DA4A2C7963A4CD00C947CE \
C1735CB29890EEDEABCF1D0DC9310F81D77519BC
Il primo argomento è l’impronta digitale della chiave principale. Il secondo argomento è l’impronta digitale della sottochiave di crittografia della chiave di backup.
È possibile verificare che l’ADSK sia stato creato:
$ 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
La sottochiave con la funzionalità R
(limitata) è l’ADSK. Ha la stessa impronta digitale della sottochiave di crittografia della chiave di backup.
Ora è possibile distribuire la chiave pubblica con l’ADSK.
Utilizzo di un ADSK¶
Quando si cripta un messaggio per la chiave principale, la chiave di backup viene ora aggiunta automaticamente come destinatario. Gli unici requisiti sono:
Il mittente del messaggio ha una chiave pubblica aggiornata che include l’ADSK.
Il mittente del messaggio utilizza GnuPG 2.2.42 o più recente.
Se si aggiunge il flag --verbose
, è possibile controllare le chiavi con cui il messaggio è stato crittografato:
$ 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>"
Si può anche usare l’opzione --list-packets
per controllare un messaggio criptato:
$ 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
Ogni riga di pubkey enc packet
rappresenta una chiave in grado di decifrare il messaggio.
Revoca di un ADSK¶
Se si revoca un ADSK, questo non verrà più aggiunto come destinatario durante la crittografia di un messaggio. Per eseguire una revoca, aprire la chiave con 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>
Selezionare la sottochiave da revocare con key N
. La sottochiave selezionata è contrassegnata da un asterisco:
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>
Revocare la sottochiave con revkey
e quindi salvare le modifiche con 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
Ora distribuite la chiave pubblica aggiornata.
Nota
La revoca diventerà effettiva solo quando il mittente avrà aggiornato la chiave pubblica con l’ADSK revocato. I messaggi già crittografati possono essere decifrati con l’ADSK anche se questo viene revocato.