assinaturas digitais com o GnuPG

num artigo anterior, introduzi o GnuPG verificando um ficheiro assinado e cifrando um ficheiro para um destinatário usando uma chave pública. Eu também compartilhei como criar um par de chaves e exportar uma chave pública para que pudéssemos receber mensagens criptografadas. Neste artigo, vou demonstrar como assinar arquivos antes de compartilhar via e-mail ou publicação em um site.

com o GnuPG, existem vários métodos de assinatura de um arquivo.

$ gpg --help | grep -i signSign, check, encrypt or decrypt -s, --sign make a signature --clear-sign make a clear text signature -b, --detach-sign make a detached signature --verify verify a signature

como cada opção é discutida, eu vou assinar um arquivo de texto simples.

$ cat sample.txt Sample text for gpg signing

Faça uma assinatura

com a opção --sign , o arquivo é efetivamente criptografado com a chave privada. A chave pública é necessária para ver o conteúdo do arquivo. Isto obriga o destinatário a verificar a origem e remove qualquer conteúdo de texto claro do trânsito. Não é privado, uma vez que qualquer pessoa com a chave pública pode descriptografar o arquivo.

$ gpg -s sample.txt

isto resulta num ficheiro chamado sample.txt.gpg.

$ file sample*sample.txt: ASCII textsample.txt.gpg: data
Imagem
Gráfico exibindo dois arquivos enviados de a para B, onde a é um texto simples e um é criptografado

Para verificar apenas a assinatura, use o --verify opção. Para visualizar o conteúdo e mostrar a verificação da Assinatura, use a opção --decrypt.

$ gpg --decrypt sample.txt.gpg Sample text for gpg signinggpg: Signature made Sat 30 May 2020 09:16:24 AM EDTgpg: using DSA key 15AC***********...omitted...

Faça uma assinatura destacada

a opção de assinatura destacada está disponível para proporcionar a todos a opção de ver a mensagem sem ter a chave pública. Isto cria um ficheiro de assinatura separado que é usado para verificar a mensagem original, se desejar. Em sua forma mais simples, este arquivo contém um hash da mensagem original e é criptografado com a chave privada. Qualquer um com a chave pública pode abrir a assinatura e, em seguida, comparar hashes para verificar a integridade do arquivo assinado.

Crie o ficheiro de assinatura usando a opção --detach-sign.

$ gpg -b sample.txt

o resultado é separado .ficheiro de dados sig.

$ file sample*sample.txt: ASCII textsample.txt.gpg: datasample.txt.sig: data
Imagem
Gráfico exibindo dois arquivos enviados de a para B, onde a é um texto simples e um é criptografado

Se você não deseja compartilhar, publicar, e-mail ou um arquivo de dados, você pode assinar o arquivo com o --armor opção, e ele irá criar um arquivo de texto ASCII com a assinatura. Ele também vai usar o .extensão asc em vez do .extensão sig:

$ cat sample.txt.asc -----BEGIN PGP SIGNATURE-----iF0EABECAB0WIQQVrPeUo9lk0dnOTCbvwxHCv6EJdAUCXtO/yAAKCRDvwxHCv6EJdC2BAJ49fIcOdBUdE0PELySEMlKNzVnZLgCdG1gsTim3gab2dgL6qagHArSlgq8==IvP/-----END PGP SIGNATURE-----

o ficheiro de texto simples original e o ficheiro de assinatura separado devem ser disponibilizados ao destinatário.

para verificar a assinatura, indique o ficheiro de assinatura e, em seguida, o ficheiro original.

$ gpg --verify sample.txt.sig sample.txt

se tiverem sido usados os nomes por omissão, poderá deixar de fora o nome do ficheiro não cifrado.

$ gpg --verify sample.txt.sig gpg: assuming signed data in 'sample.txt'gpg: Signature made Sat 30 May 2020 09:23:53 AM EDT...omitted...

Make a clear text signature

the --clear-sign option is a newer option in terms of the long history of GPG and is very common for files published to web sites such as the Fedora download CHECKSUM files. O conteúdo pode ser lido por qualquer um. A informação da Assinatura também está disponível no mesmo arquivo para aqueles que querem verificar a origem e integridade do conteúdo.

imagem
conteúdo do ficheiro de código de validação que mostra tanto o texto simples do bloco de assinatura SHA256SUM como do PGP

a opção --clear-sign irá criar um novo ficheiro com o.extensão asc.

$ gpg --clear-sign sample.txt
$ file sample*sample.txt: ASCII textsample.txt.asc: ASCII textsample.txt.gpg: datasample.txt.sig: data

para verificar a Assinatura, use a opção --verify :

$ gpg --verify sample.txt.asc gpg: Signature made Sat 30 May 2020 09:27:56 AM EDT...omitted...gpg: WARNING: not a detached signature; file 'sample.txt' was NOT verified!

Note que uma mensagem é exibida durante o aviso do processo de verificação de que o arquivo original associado não está assinalado. Você pode mudar o nome deste arquivo antes de postá-lo em seu site. A verificação ainda irá verificar o conteúdo do arquivo.

embora este seja muitas vezes o método mais conveniente para os consumidores de seus produtos, há um aviso na página de man GPG que assinaturas destacadas são a melhor opção quando a verificação completa é necessária.

da página do gpg man:

nota: ao verificar uma assinatura de cleartext, o GPG verifica apenas o que compõe os dados assinados de cleartext e não quaisquer dados extra fora da assinatura de cleartext ou das linhas de cabeçalho directamente a seguir à linha de marcação do traço. A opção –output pode ser usada para escrever os dados realmente assinados, mas existem outras armadilhas com este formato também. Sugere-se evitar assinaturas cleartext em favor de assinaturas separadas.

usando um teclado específico

os exemplos acima foram todos assinados com a primeira chave privada disponível no meu Porta-Chaves. Eu posso querer usar uma chave diferente quando estou assinando um arquivo para publicação em um site. Um teclado é criado especificamente para o projeto ou produto. O teclado pode até estar num novo porta-chaves partilhado.

$ gpg --keyring /etc/gpgkeys --no-default-keyring --full-gen-key <other options>

quando um ficheiro é assinado ou encriptado, certifique-se de indicar também a opção --keyring.

mesmo que apenas uma pessoa esteja usando a chave para assinar arquivos, faça um teclado separado para usar para assinar. Não use a mesma chave para outras tarefas diárias, como criptografia de E-mail pessoal. Você pode listar os nomes das chaves privadas disponíveis com gpg --list-secret. O ID, nome ou e-mail pode ser usado para identificar a chave.

para assinar o ficheiro com uma chave específica de um porta-chaves, use a opção de identidade --local-user.

$ gpg --local-user "My Project 2" --clear-sign sample.txt

embrulhe

se o seu ficheiro de texto simples for uma lista de traços de códigos de validação para os seus downloads de produtos, esse ficheiro, quaisquer ficheiros de assinatura e a chave pública utilizada para verificar as assinaturas podem ser todos publicados num sítio web. Os consumidores podem então verificar os downloads antes de instalar qualquer software em seus sistemas.



+