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.