Subchaves de desencriptação adicionais (ADSK) com GnuPG#

Nitrokey 3

Nitrokey Passkey

Nitrokey FIDO2

O LED da NextBox mudará para <x id=»31»></x>azul<x id=»36»></x> em cada pressão, após a segunda pressão mudará para azul intermitente (ver Documentação LED). Uma vez que o LED tenha finalmente atingido <x id=»187»></x>verde<x id=»193»></x> novamente durante pelo menos 20 segundos o seu NextBox está pronto para ser utilizado novamente. Por favor, não desligue o NextBox durante este processo, pois isso pode partir alguma coisa.

Nitrokey HSM 2

Nitrokey Pro 2

Nitrokey Start

Nitrokey Storage 2

Subchaves de desencriptação adicionais (ADSK) podem ser utilizadas para adicionar automaticamente destinatários ao encriptar uma mensagem com o GnuPG. Casos típicos de uso incluem

  • ter uma única chave de encriptação para um grupo sem necessidade de partilhar a chave privada entre os membros do grupo,

  • adding a backup key to an encryption key, and

  • definir uma chave mestra que possa decifrar mensagens para outras chaves.

Nota

Para configurar uma ADSK, é necessário o GnuPG 2.4.1 ou mais recente. Para encriptar uma mensagem para uma chave com uma ADSK, é necessário o GnuPG 2.2.42 ou mais recente.

Visão geral#

definir uma chave mestra que possa decifrar mensagens para outras chaves.

Preparing the Keys#

Follow one of these guides to generate the two keys:

Certifique-se de que pode listar ambas as chaves com gpg --list-keys, por exemplo:

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

Adicionar uma ADSK#

Primeiro, determine a impressão digital da subchave de encriptação para a chave de salvaguarda:

$ 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

Procure a linha que começa com sub que contém a letra E, indicando uma subchave com capacidade de encriptação. A impressão digital desta subchave é listada na linha seguinte. Neste caso, a impressão digital é C1735CB29890EEDEABCF1D0DC9310F81D77519BC.

definir uma chave mestra que possa decifrar mensagens para outras chaves.

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

Pode encontrá-lo na linha seguinte a pub, neste caso 55BC284C1D30D97638DA4A2C7963A4CD00C947CE.

Agora você pode adicionar o ADSK usando a flag --quick-add-adsk:

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

No meio, clique no botão <x id=»24»></x>Abrir uma janela KVM remota flutuante<x id=»58»></x>, no canto superior direito da caixa de saída VGA.

É possível verificar se o ADSK foi criado:

$ 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

A subchave com a capacidade R (restrita) é a ADSK. Tem a mesma impressão digital que a subchave de encriptação da chave de backup.

Agora pode distribuir a chave pública com a ADSK.

Utilizar um ADSK#

Ao encriptar uma mensagem para a chave principal, a chave de segurança é agora automaticamente adicionada como destinatário. Os únicos requisitos para tal são:

  • O remetente da mensagem tem uma chave pública actualizada que inclui a ADSK.

  • O remetente da mensagem utiliza o GnuPG 2.2.42 ou mais recente.

Se adicionar o sinalizador --verbose, pode verificar as chaves para as quais a mensagem está encriptada:

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

Também é possível utilizar a opção --list-packets para verificar uma mensagem encriptada:

$ 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

Cada linha pubkey enc packet representa uma chave que pode desencriptar a mensagem.

Revogação de uma ADSK#

Se revogar uma ADSK, esta deixará de ser adicionada como destinatário quando encriptar uma mensagem. Para efetuar uma revogação, abra a chave com 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>

Selecionar a subchave a revogar com key N. A subchave selecionada é marcada com um 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>

Revogar a subchave com revkey e, em seguida, guardar as alterações com 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

Now distribute the updated public key.

Nota

A revogação só se tornará efectiva quando o remetente tiver atualizado a chave pública com a ADSK revogada. As mensagens que já tenham sido encriptadas podem continuar a ser desencriptadas com a ADSK, mesmo que esta seja revogada.