Traduções: English - Français - Italiano - Português (Brasil)


Usando subchaves OpenPGP no desenvolvimento do Debian

O que são chaves?

Em criptografia de chave pública, uma chave é na verdade um par: uma chave pública e uma chave privada. Você usa a chave privada para assinar arquivos digitalmente e outras pessoas usam a chave pública para verificar a assinatura. Ou, outra pessoas usam a chave pública para criptografar algo e você usa a chave privada para descriptografar.

Enquanto somente você tiver acesso à chave privada, outras pessoas podem confiar que suas assinaturas estão sendo feitas por você, e você pode confiar que ninguém mais é capaz de ler as mensagens criptografadas por você.

O GnuPG, a implementação usada no Debian, seleciona a chave correta em qualquer ocasião necessária.

O que são subchaves?

O OpenPGP também suporta subchaves, que são como chaves normais, mas que estão vinculadas a um par de chaves primárias. Uma subchave pode ser usada para assinar ou para criptografar. A parte realmente útil de subchaves é que podem ser revogadas independentemente das chaves primárias e também podem ser armazenadas separadamente.

Em outras palavras, subchaves são como um par de chaves em separado, mas automaticamente associadas com seu par de chaves primárias.

Na verdade, o GnuPG usa uma chave exclusiva de assinatura como chave primária e cria uma subchave de criptografia automaticamente. Sem uma subchave para criptografia, você não conseguiria criptografar e-mails com o GnuPG. O Debian requer que você tenha a subchave de criptografia para que certas coisas possam ser enviadas por e-mail para você com segurança, como a senha inicial para sua conta shell debian.org.

Por quê?

Subchaves tornam a administração de chaves mais fácil. O par de chaves primária é muito importante: é a melhor prova de sua identidade on-line, aos menos para o Debian, e se você perdê-las, terá que reconstruir sua reputação do zero. Se alguém mais obtiver acesso à sua chave primária privada ou à sua subchave privada, é possível fazer com que todas as pessoas acreditem que é você: pode-se fazer o upload de pacotes em seu nome, votar em seu nome, e fazer qualquer coisa que você faria. Isto pode ser muito danoso para o Debian. Isso vai dar muita dor de cabeça. Então você deve manter suas chaves privadas bem guardadas.

Você deve manter sua chave primária privada muito, muito bem guardada. Contudo, manter todas as suas chaves em extrema segurança é inconveniente: toda vez que precisar assinar um novo upload de pacote você precisará copiar os pacotes para uma mídia portável adequada, ir até o subsolo, provar para a guarda armada que você é você usando diversos métodos biométricos e outras formas de identificação, passar por um labirinto mortal, alimentar os cães de guarda com o tipo correto de carne, e finalmente abrir o cofre, pegar o notebook de assinatura e assinar os pacotes. Aí fazer o inverso para conseguir a conexão com a Internet para realizar o upload dos pacotes.

As subchaves deixam isso mais fácil: você já tem uma subchave de criptografia criada automaticamente e você cria uma outra subchave para assinatura, e as mantém em seu computador principal. Você divulga as subchaves em servidores normais de chaves e qualquer pessoa pode usá-las em vez das chaves primárias para criptografar mensagens ou para verificar suas assinaturas de mensagens. Da mesma forma, você usará as subchaves para descriptografar e assinar mensagens.

Você precisará usar as chaves primárias somente em circunstâncias excepcionais, particularmente quando quiser modificar suas próprias chaves ou de outras pessoas. Mais especificamente, você precisará de sua chave privada primária:

(Porque cada uma dessas operações é realizada ao se adicionar uma nova assinatura própria/de revogação de uma chave primária privada).

Como cada ligação da Rede de Confiança (Web of Trust) é um endosso do vínculo entre uma chave pública e um ID de usuário(a), as assinaturas de certificação OpenPGP (da chave primária privada de quem assina) são relativas ao UID e são irrelevantes para as subchaves. Em particular, a criação ou revogação de subchaves não afetam a reputação da chave primária. Assim, no caso em que sua subchave for roubada enquanto sua chave primária permanece segura, você pode revogar a subchave comprometida e substitui-la com uma nova subchave sem ter que reconstruir sua reputação e sem reduzir a reputação de chaves assinadas de outras pessoas com sua chave privada.

Como?

Infelizmente, a interface de usuário(a) do GnuPG não é muito divertida de usar. Abaixo vamos te levar pelas etapas necessárias.

Essas instruções assumem que você usa um computador e que mantém as chaves primárias em um pendrive USB criptografado, ou preferencialmente em dois pendrives (você deve ter cópias de segurança de suas chaves secretas). Também assumimos que você já tem uma chave; se não, veja http://keyring.debian.org/creating-key.html para instruções.

  1. Faça cópias de segurança de seus arquivos GnuPG ($HOME/.gnupg). Mantenha-os seguros. Se algo der errado durante os passos seguintes, talvez você precise deles para retornar para uma situação melhor.

    • umask 077; tar -cf $HOME/gnupg-backup.tar -C $HOME .gnupg

    (nota: umask 077 resultará em permissões restritivas para a cópia de segurança).
  2. Crie uma subchave para assinatura.
    • Enconre o ID de sua chave: gpg --list-keys seunome

    • gpg --edit-key ID_DE_SUA_CHAVE_PRIMÁRIA

    • No prompt gpg> addkey

    • Isto pedirá sua frase secreta, digite-a.
    • Escolha o tipo de chave "RSA (sign only)" (somente assinatura).
    • É sensato escolher o tamanho de chave 4096 (ou ao menos 2048) bits.
    • Escolha uma data de expiração (você pode rotacionar suas subchaves mais frequentemente que as chaves primárias, ou mantê-las por toda a vida da chave primária, sem expiração).
      • Os calendários julianos podem ajudar a calcular o número exato de dias para uma determinada data de calendário

      • date +%j # comando para exibir a data juliana atual

      • date -d 2021-05-16 +%j # comando para exibir uma data juliana específica

    • O GnuPG criará (eventualmente) uma chave, mas você terá que esperar pela entropia necessária.
    • Salve a chave: save

  3. Você pode repetir o processo e também criar uma subchave "RSA (encrypt only)" (somente criptografia) se quiser ou se precisar. Como mencionado acima, tenha em mente que a opção padrão ao criar inicialmente um novo par de chaves serve para criar uma subchave de criptografia, então você provavelmente já tem uma. Em todo caso, para o Debian, somente a chave de assinatura é suficiente.
  4. Agora copie $HOME/.gnupg para seus pendrives USB.

  5. Aqui vem a parte ardilosa: você precisa remover a chave primária privada.
    • Se estiver usando GnuPG 2.1 ou mais recente, tudo que precisa fazer é apagar o arquivo $HOME/.gnupg/private-keys-v1.d/KEYGRIP.key, onde KEYGRIP é o "keygrip" da chave primária que pode ser encontrada ao se executar gpg2 --with-keygrip --list-key ID_DE_SUA_CHAVE_PRIMÁRIA (a parte privada de cada par de chaves tem um "keygrip", então este comando lista um "keygrip" para a chave primária e um pra cada subchave). Note, entretanto, que se o chaveiro (keyring) foi recentemente migrado para um novo formato, o agora obsoleto arquivo $HOME/.gnupg/secring.gpg ainda pode conter a chave primária privada: portanto certifique-se de também apagar aquele arquivo se não estiver vazio.

    • Infelizmente, o GnuPG <2.1 não fornece um modo conveniente para remover a chave primária privada. Em vez disso, precisamos exportar a subchave, remover a chave privada e importar a subchave de volta.

      • Exporte as subchaves: gpg --output secret-subkeys --export-secret-subkeys ID_DE_SUA_CHAVE_PRIMÁRIA. Alternativamente, especifique os IDs de subchave, cada um seguido de um ponto de exclamação, para escolher quais subchaves serão exportadas: gpg --output secret-subkeys --export-secret-subkeys ID_DA_SUBCHAVE! [ID_DA_SUBCHAVE! ..]

      • Remova sua chave secreta primária: gpg --delete-secret-keys ID_DE_SUA_CHAVE_PRIMÁRIA

      • Importe as subchaves de volta: gpg --import secret-subkeys

      • Remova o arquivo contendo as subchaves privadas: rm secret-subkeys

    Verifique se gpg -K apresenta um sec# em vez de somente sec para sua chave privada. Isto significa que a chave secreta não está realmente ali (veja também a presença de um pacote OpenPGP transitório - dummy - na saída de gpg --export-secret-keys ID_DE_SUA_CHAVE_PRIMÁRIA | gpg --list-packets.)

  6. Altere a frase secreta, protegendo as subchaves: gpg --edit-key ID_DE_SUA_CHAVE_PRIMÁRIA passwd. Desta forma, se a frase secreta diária ficar comprometida, a chave primária privada permanecerá segura contra alguém com acesso à cópia de segurança: o material de chave privada no backup, incluindo a chave primária privada, ficam protegidos contra frases secretas antigas.

Agora seu computador está pronto para uso normal.

Quando precisar usar as chaves primárias, monte o pendrive USB criptografado e defina a variável de ambiente GNUPGHOME:

export GNUPGHOME=/media/algumacoisa
gpg -K

ou use o argumento de linha de comando --homedir:

gpg --homedir=/media/algumacoisa -K

O último comando deve listar sua chave privada com sec e não com sec#.

E depois?

A partir deste momento, você tem uma subchave e precisa enviá-la ao servidor de chaves do Debian; se sua chave já está no chaveiro Debian, a rede de servidores de chaves gerais são:

gpg --keyserver hkp://keyring.debian.org --send-key ID_DE_SUA_CHAVE_PRIMÁRIA
gpg --keyserver hkp://pool.sks-keyservers.net --send-key ID_DE_SUA_CHAVE_PRIMÁRIA

O upload para o servidor de chaves Debian somente funciona se sua chave pública primária já está em chaveiros DD ou DM: o servidor de chaves Debian aceita atualizações de chaves existentes, mas não de novas chaves. Novas chaves são adicionadas por mantenedores(as) de chaveiros manualmente. Atualizações de chaves precisam além disso de uma atualização manual para serem adicionadas ao chaveiro realmente usado pelos servidores do Debian, o que geralmente acontece uma vez ao mês (veja https://salsa.debian.org/debian-keyring/keyring/commits/master para saber se sua subchave foi adicionada).

Desse modo, pode levar 1 mês para que sua nova SubChave seja atualizada nos servidores on-line do Debian.

(Na primeira vez que sua chave é adicionada aos chaveiros Debian: manual, quando você é aceito como DD ou DM. Após isso, o upload de subchaves para o servidor de chaves: automático. A cópia de atualizações de servidores de chaves para o chaveiro Debian: manual, uma vez ao mês).

Ao terminar, você deve ser capaz de fazer uploads de pacotes para o Debian usando a subchave em vez da chave primária. A subchave herdará o estado web-of-trust (rede-de-confiança) do par de chaves primárias.

Opa

Se um desastre acontecer e você precisa revogar a subchave por qualquer motivo, faça o seguinte:

  1. Monte o pendrive USB criptografado.
  2. export GNUPGHOME=/media/seupendrive

  3. gpg --edit-key ID_DE_SUA_CHAVE_PRIMÁRIA

  4. No prompt gpg>, liste as chaves (list), selecione aquela não mais desejada (key 123) e gere um certificado de revogação (revkey), a seguir salve.

  5. Envie a chave atualizada para os servidores de chaves mencionados acima.

Ressalvas

Subchaves múltiplas por máquina vs. Uma única subchave para todas as máquinas

Alguém pode ter a tentação de ter uma subchave por máquina, de modo que somente precise trocar a subchave potencialmente comprometida daquela máquina. No caso de uma única subchave usada em todas as máquinas, é preciso trocar em todas as máquinas no caso de comprometimento.

Mas isso somente funciona para subchaves de assinatura. Se você tem múltiplas subchaves de criptografia, o gpg é conhecido por criptografar somente pela subchave de criptorafia mais recente e não para todas as subchaves de criptografia conhecidas e não revogadas.


CategoryDeveloper