Verifique downloads com GPG
Quero fazer umas postagens sobre autocustódia de Bitcoin no futuro, mas saber como verficar arquivos com GPG é um pré-requisito e por isso escrevi esta explicação simples e introdutória sobre GPG. Vou explicar aqui apenas o mínimo que você precisa saber.
Criptografia Assimétrica
GPG ou GnuPG é uma ferramenta de criptografia simétrica e assimétrica. O que interessa para nós é a assimétrica. Que porra é isso?
Diferente da criptografia simétrica, que se usa uma senha para criptografar dados, a assimétrica usa duas chaves, a chave privada ou secreta e a chave pública. Vou me referir a elas como
Não vou me aprofundar, mas os conceitos principais que você tem que entender são:
- A
🔑Secret Key é criada aleatoriamente e a🔓Public Key é gerada a partir da🔑Secret Key . - Como dito no item 1, você pode descobrir qual é a
🔓Public Key se tiver a🔑Secret Key . - Você NÃO pode descobrir a
🔑Secret Key a partir da🔓Public Key . - A
🔓Public Key é pública e você mostra para todo mundo, estampa na camiseta, faz uma tatuagem, etc... - A
🔑Secret Key é SECRETA, PRIVADA, e se você deixar vazar você se lascou.
E o mais importante:
1. Uma mensagem* encriptada pela
2. Uma mensagem* encriptada pela
*= entenda mensagem como dado, informação, arquivo, etc...
Usos do GPG
Você pode usar GPG para basicamente duas coisas:
- Encriptar mensagens usando a
🔓Public Key do destinatário, ele usará a🔑Secret Key dele para decriptar. - Encriptar mensagens usando sua própria
🔑Secret Key , de forma que qualquer um que tenha sua🔓Public Key possa decriptar.
Leia novamente o item 2 e pense sobre isso. Se todos conhecem minha
Qual é a utilidade de encriptar uma mensagem que todos podem decriptar?
É útil porque se eles conseguem decriptar a mensagem com sua
Ou seja, você pode usar essa característica para assinar uma mensagem, gerar uma assinatura digital.
O que é assinar uma mensagem?
Assinar uma mensagem é encriptá-la com sua
Isso é uma simplificação, mas é uma boa forma de entender.
E por que é útil?
Porque isso serve como uma
Nesse contexto, faria sentido chamar a
E o que acontece se eu deixar vazar a 🔑Secret Key ?
- Qualquer um com sua
🔑Secret Key que tiver acesso a mensagens enviadas para você (encriptadas na sua🔓Public Key ) poderá ler todas essas mensagens. - Qualquer um com sua
🔑Secret Key poderá assinar mensagens e se passar por você.
É assim que criptografia assimétrica funciona. Se ficou confuso, peço que leia novamente. É mais simples do que parece.
Como verificar mensagens com GPG
Em outras palavras, como checar se o software que baixei tem autenticidade e integridade.
- Autenticidade: se foi assinado com uma
🔑Secret Key que confio. - Integridade: se não foi alterado no meio do caminho.
Se você não estiver usando Linux, pesquise na internet como usar o GPG no seu sistema operacional. Mas se você realmente quiser fazer autocustódia, use Linux. Windows é muito menos seguro.
Não somente leia, faça você mesmo os passos e pratique para aprender como funciona.
Para fins de exemplo, nós vamos baixar e verificar o Tor Browser.
Os passos são:
- Baixe o software.
- Baixe a
🔏assinatura . - Baixe e importe a
🔓Public Key do signatário do software. - Verifique em VÁRIOS lugares se a
🔓Public Key é mesmo confiável, checando ofingerprint . - Verifique a integridade e a autenticidade do arquivo baixado usando GPG.
1. Baixe o software
Vá até o site do Tor, em https://www.torproject.org e baixe. Escolhi a versão para Linux.
2. Baixe a 🔏assinatura
Procure no site por checksums, signatures, ou algo assim. No caso do Tor, você encontra Signature abaixo do link de download.
$ ls
tor-browser-linux-x86_64-14.0.6.tar.xz
tor-browser-linux-x86_64-14.0.6.tar.xz.asc
Geralmente a
Uma
$ cat tor-browser-linux-x86_64-14.0.6.tar.xz.asc
-----BEGIN PGP SIGNATURE-----
iQIzBAABCgAdFiEEyq5AiuviKI6W/F1eFXQyz3imVykFAmemQBoACgkQFXQyz3im
VymtIRAAmWa4evWPVsCOjmhRIxQKsUxLBXjcUrOQkGKWIDfLadSsKaiEQjcF3d6d
dVTWLE7HNmcEbcEczdTGrTAPGccoIBPIHVN1Rk5ij+Ov5xyzBReEto3xTeyEAP25
057jITJR8gHNKnW/1eza+oAvPUOrjD3zTxyD7dTn7NjLaL9HIUNLUy+/2CaH1M1L
xzeNE9MSVP6R8SkEHdQmYbB7CITjthQo3v6owHN7lVn2nx4a3Kg2rbRMDfYqlXOa
Oo+JL8qiN7lHbvvCgSpmTvWsuIRYhYiG8BGttFi3wYOPYQe5ZSRMBp9c+4uTZo9D
JUV8tLPbMic2r0fNL4wQhxR1Jp5P9R0dqf5XsZ+NTo6Ip/cjer2CXKDIff0JnG7T
sO2Ccc6PEcR20vDwotcKcH/HIeyfIuQoqBYwamm+eepYP4rRN+56rknqalPLnWu0
gNMKuw63azuGkyiEEdl4ZAvJpm7z+64Bht/dZPMJ4KplyMytahJokH2kFilvCsKh
6gQbP6Xsh1B1zfyNGCjXMhfx8ciAjul7ocV1S67tt0rfSonWuJUp/h/QdpVoJjOi
d3Vn0az+R6r02qfLflHPxYQKzcpp8Do62b26EZQGScI3/0SFtFm40neXi7zNe2gQ
wohJg7PjntB2nClQPbuWPVBf74t8kH7iDe9El6GhQzv2CSFQ85o=
=q3ol
-----END PGP SIGNATURE-----
Há um cabeçalho informando que é uma
Temos o arquivo e a
3. Baixe e importe a 🔓Public Key do signatário do software
Geralmente você não irá encontrar a
Por isso se deixa a
No caso do exemplo, abaixando a página, você encontra um link: How can I verify Tor Browser signature? e entrando nessa página eles te explicam como baixar a
Abaixo na mesma página, na seção Workaround (using a public key) eles dão o link para a
$ ls
EF6E286DDA85EA2A4BA7DE684E2C6E8793298290.asc
tor-browser-linux-x86_64-14.0.6.tar.xz
tor-browser-linux-x86_64-14.0.6.tar.xz.asc
A chave pública também é geralmente um arquivo .asc que pode ser lido:
$ head EF6E286DDA85EA2A4BA7DE684E2C6E8793298290.asc
-----BEGIN PGP PUBLIC KEY BLOCK-----
Comment: EF6E 286D DA85 EA2A 4BA7 DE68 4E2C 6E87 9329 8290
Comment: Tor Browser Developers (signing key) xsFNBFSOr7oBEADQMs+Q5cAshRhj3YkKgCBKyrjFWMZqVhlf9Y3ePtFQ9kFEnYIS G9rzMhFC6KMXPn9bgg6OBPPUnnJ29UsKvAk+qa8F35R+s0ZXmPRfmv5/6PqxLOn4 G733K67K0/eXYW1mTkz9sjY8u9E3T10JNT0zE/60WihuZGKZQDIqqig0fOsdvdGa g+srAW91T56kAT+y59VcvqVCQNjS897E3T9hsUNkQNCdOitQcnN8/5VNQUL0SjyD BV0y5ry+pUt1rnojj82KQ3WzZuD+XsDE+w2JSGqhcqf9b7D6puy1smhCNwZJ9L1l pJlrCap6YQN8TPFTkf4aFBctxonAdQDDxbON6sPJALc/myPwTVTxD3nJJhv12yft ...
Esse é o começo do arquivo. Ele tem um cabeçalho informando que é uma chave pública (
Podemos importá-la com:
$ gpg --import EF6E286DDA85EA2A4BA7DE684E2C6E8793298290.asc
gpg: key 4E2C6E8793298290: 2 signatures not checked due to missing keys
gpg: key 4E2C6E8793298290: public key "Tor Browser Developers (signing key)
gpg: Total number processed: 1
gpg: imported: 1
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 3 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 3u
gpg: next trustdb check due at 2027-02-10
A chave está importada no seu keyring. Keyring (chaveiro) é o nome que se dá para seu conjunto de chaves.
Você pode ver todas as suas chaves com:
$ gpg --fingerprint
/home/anon/.gnupg/pubring.kbx
-----------------------------
pub rsa4096 2014-12-15 [C] [expires: 2027-07-15]
EF6E 286D DA85 EA2A 4BA7 DE68 4E2C 6E87 9329 8290
uid [ unknown] Tor Browser Developers (signing key)
sub rsa4096 2024-07-15 [S] [expires: 2026-10-26]
Agora você pode verificar os arquivos? Não.
Como sabemos se essa chave é confiável? E se alguém hackeou o site do Tor e colocou lá um link para uma chave fraudulenta?
4. Verifique em VÁRIOS lugares se a 🔓Public Key é mesmo confiável, checando o fingerprint
Cada
Não é só porque está no keyserver que é confiável. Qualquer um pode subir uma chave lá.
O que eu faço é pesquisar na internet "what is Tor public key fingerprint" e geralmente eu encontro alguma postagem em fóruns citando o
Convenhamos, o hacker teria que forjar vídeos do Youtube, posts em fóruns, hackear o site do Tor e mais um monte de coisas para fazer essa fraude. Se você encontra a
Achei esse post no reddit https://www.reddit.com/r/TOR/comments/s25eoq/cant_check_signature_no_public_key/?rdt=34735 de 3 anos atrás e a
A parte mais especial foi esta: baixar a
5. Verifique a integridade e a autenticidade do arquivo baixado usando GPG
Agora é só usar o comando na
$ gpg --verify tor-browser-linux-x86_64-14.0.6.tar.xz.asc
gpg: assuming signed data in 'tor-browser-linux-x86_64-14.0.6.tar.xz'
gpg: Signature made Fri 07 Feb 2025 02:17:14 PM -03
gpg: using RSA key CAAE408AEBE2288E96FC5D5E157432CF78A65729
gpg: Good signature from "Tor Browser Developers (signing key)
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: EF6E 286D DA85 EA2A 4BA7 DE68 4E2C 6E87 9329 8290
Subkey fingerprint: CAAE 408A EBE2 288E 96FC 5D5E 1574 32CF 78A6 5729
O resultado foi
Se você não teve o resultado "Good signature", não use o software.
É extremamente simples fazer uma verificação dessas. Você só precisou de dois comandos, um pra importar e chave e outro para verificar.
A parte principal é baixar os arquivos corretos.
Lembre-se:
- Geralmente
🔏assinaturas e🔓Public Keys são arquivos de texto terminados em .asc. Mas também podem ser arquivos binários terminados em .gpg. Também ocorrem com a extensão .sig. Elas são distribuidas junto com o software. - Geralmente as pessoas deixam suas
fingerprints e vários lugares da internet, como redes sociais, sites pessoais, etc, para os outros encontrarem e verificarem. Sempre procure em mais de um lugar. - Uma
fingerprint se parece com isso: EF6E 286D DA85 EA2A 4BA7 DE68 4E2C 6E87 9329 8290.
Mais um exemplo, baixando e verificando a carteira Electrum
Vamos fazer mais uma vez para consolidar.
O primeiro cuidado é verificar se está entrando no site correto. A URL do site da carteira electrum é https://electrum.org/.
SEMPRE olhe a URL para não entrar em sites falsos!
Vá em downloads e baixe o software. Eu irei baixar o appimage para Linux como exemplo.
$ ls
electrum-4.5.8-x86_64.AppImage
Procure pela
No caso do Electrum, clique em "signatures" ao lado do arquivo que você baixou.
$ ls
electrum-4.5.8-x86_64.AppImage
electrum-4.5.8-x86_64.AppImage.asc
Nós temos o software e a
O que acontece se tentarmos verificar mesmo assim?
$ gpg --verify electrum-4.5.8-x86_64.AppImage.asc
gpg: assuming signed data in 'electrum-4.5.8-x86_64.AppImage'
gpg: Signature made Wed 23 Oct 2024 04:13:28 AM -03
gpg: using RSA key 637DB1E23370F84AFF88CCE03152347D07DA627C
gpg: Can't check signature: No public key
gpg: Signature made Wed 23 Oct 2024 03:03:11 AM -03
gpg: using RSA key 0EEDCFD5CAFB459067349B23CA9EEEC43DF911DC
gpg: Can't check signature: No public key
gpg: Signature made Wed 23 Oct 2024 12:26:58 AM -03
gpg: using RSA key 6694D8DE7BE8EE5631BED9502BD5824B7F9470E6
gpg: Can't check signature: No public key
A saída mostra que o arquivo foi assinado por três chaves diferentes e exibe os
O GPG automaticamente procurou pelas chaves que possuem esses
Agora vamos voltar ao site e procurar pelas chaves. Lá está escrito: The current executables have been signed by ThomasV, SomberNight, Emzy.
Baixamos a chave do ThomasV que está em https://raw.githubusercontent.com/spesmilo/electrum/master/pubkeys/ThomasV.asc e importamos.
Mas antes de usar essa chave, precisamos confiar nela. Pesquisando na internet, encontrei vários posts de fóruns com a
Tem também um vídeo no youtube onde o ThomasV aparece ao lado de sua
Então essa é mesmo a
$ ls
electrum-4.5.8-x86_64.AppImage electrum-4.5.8-x86_64.AppImage.asc ThomasV.asc
$ gpg --import ThomasV.asc
gpg: key 2BD5824B7F9470E6: public key "Thomas Voegtlin (https://electrum.org)
gpg: Total number processed: 1
gpg: imported: 1
Verificamos novamente com o mesmo comando de antes:
$ gpg --verify electrum-4.5.8-x86_64.AppImage.asc
gpg: assuming signed data in 'electrum-4.5.8-x86_64.AppImage'
gpg: Signature made Wed 23 Oct 2024 04:13:28 AM -03
gpg: using RSA key 637DB1E23370F84AFF88CCE03152347D07DA627C
gpg: Can't check signature: No public key
gpg: Signature made Wed 23 Oct 2024 03:03:11 AM -03
gpg: using RSA key 0EEDCFD5CAFB459067349B23CA9EEEC43DF911DC
gpg: Can't check signature: No public key
gpg: Signature made Wed 23 Oct 2024 12:26:58 AM -03
gpg: using RSA key 6694D8DE7BE8EE5631BED9502BD5824B7F9470E6
gpg: Good signature from "Thomas Voegtlin (https://electrum.org)
gpg: aka "ThomasV
gpg: aka "Thomas Voegtlin
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 6694 D8DE 7BE8 EE56 31BE D950 2BD5 824B 7F94 70E6
O resultado é Good signature from... e a
Note que este arquivo foi assinado por três chaves, e conseguimos o Good signature em uma delas.
O ideal é que você importe as outras duas chaves e consiga verificar nas três, assim terá mais segurança.
Verificando mensagens
Só para finalizar, você também pode verificar mensagens de texto da mesmíssima forma.
Eu escrevi uma mensagem que você pode baixar aqui.
A
Minha
A
Como exercício, tente verificar a mensagem. Só para ficar claro que não serve apenas para softwares.
Depois tente editar o arquivo .txt e verifique novamente para ver o que acontece. Você vai ter um
O exemplo acima funciona, mas não é ideal. Quando são softwares você precisa de uma
Arquivo de texto com a mensagem e a
$ cat mensagem-exemplo-gpg-embutido.txt.asc
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
Mensagem de exemplo.
Qualquer um pode lê-la, mas você deve verificar a autênticidade.
A assinatura está embutida neste arquivo, então você não precisa de dois arquivos!
-----BEGIN PGP SIGNATURE-----
iQJGBAEBCgAwFiEEt1revGyMW4nDIhcST7Ayfa9JsiwFAmfB0yISHHNkZl9ib3hA
cHJvdG9uLm1lAAoJEE+wMn2vSbIsly4QAIyaX4WTbIoxDDm18X7SW+jZ8vSms//Z
i6CqJShEHKYhR8wUlYxBDeKRc/roKMtrKKJrEZfJ1rHeAE6/YcLKiSXI9ayWthVU
...
Tente verificar normalmente. Brinque com a ferramenta. Se divirta.
Só mais uma verificação... a última, eu prometo...
Tem uma situação que é um pouco diferente do que já mostrei. Em essência é a mesma coisa, mas tem um detalhe a mais.
São situações onde a
Um exemplo dessa situação é quando verificamos o Linux Mint.
Aqui nós vamos baixar três arquivos, além da
- O software;
- um arquivo .txt com
🧬hashes ; - e a
🔏assinatura desse arquivo .txt.
A diferença aqui é que a
Ou seja, é uma
Integridade e 🧬hashes
O que é um
Por exemplo, usando o algorítimo sha256 e inserindo nele a mensagem "sdf", o resultado será:
18ee24150dcb1d96752a4d6dd0f20dfd8ba8c38527e40aa8509b7adecf78f9c6.
Esse resultado é um
E apenas o
Um
E daí?
- Se eu rodar o mesmo algorítmo com a mesma mensagem, resultará SEMPRE o mesmo
🧬hash . Esse🧬hash NÃO é aleatório, a mesma mensagem sempre gerará o mesmo resultado quando inserido no sha256. - Se eu mudar uma letra da mensagem, o resultado será outro número, completamente diferente.
- É um número tão alto, mas tão alto, que é IMPOSSÍVEL duas mensagens gerarem o mesmo número.
- E é também impossível eu escolher esse número pelas razões acima. Não é possível eu mexer na mensagem para gerar o número que quero.
Por isso a saída de um algorítimo de
Hashes servem para GARANTIR a INTEGRIDADE de um arquivo.
Então, ao invés de assinar o arquivo, posso assinar o
Então você pode verificar o
Voltando ao Mint, temos os arquivos:
$ ls
linuxmint-22.1-xfce-64bit.iso sha256sum.txt sha256sum.txt.gpg
O conteúdo do arquivo sha256sum.txt é:
$ cat sha256sum.txt
ccf482436df954c0ad6d41123a49fde79352ca71f7a684a97d5e0a0c39d7f39f *linuxmint-22.1-cinnamon-64bit.iso
d286306d0f40bd7268f08c523ece5fba87c0369a27a72465a19447e3606c5fa0 *linuxmint-22.1-mate-64bit.iso
6451496af35e6855ffe1454f061993ea9cb884d2b4bc8bf17e7d5925ae2ae86d *linuxmint-22.1-xfce-64bit.iso
Na esquerda estão os
Precisamos gerar o
Usei o comando sha256sum:
$ sha256sum linuxmint-22.1-xfce-64bit.iso
6451496af35e6855ffe1454f061993ea9cb884d2b4bc8bf17e7d5925ae2ae86d linuxmint-22.1-xfce-64bit.iso
Note que o
Agora só precisamos verificar o arquivo sha256sum.txt, pois ele representa nosso software, como confirmamos ao comparar com o
Agora é só verificar o arquivo sha256sum.txt para sabermos se ele é autêntico. Eu já tenho a
$ gpg --verify sha256sum.txt.gpg sha256sum.txt
gpg: Signature made Tue 14 Jan 2025 08:35:18 AM -03
gpg: using RSA key 27DEB15644C6B3CF3BD7D291300F846BA25BAE09
gpg: Good signature from "Linux Mint ISO Signing Key
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 27DE B156 44C6 B3CF 3BD7 D291 300F 846B A25B AE09
É um método um pouco diferente, um passo a mais, mas é a mesma lógica de antes.
Por que é feito assim? Não faço ideia. Talvez seja porque o arquivo é grande e demoraria para verificar, então se usa o
Concluindo
O PGP/GPG serve para garantir que você baixou o software da pessoa certa, não que a pessoa é honesta.
Nós testamos o Electrum e temos certeza que veio do Thomas Voegtlin, mas isso não garante que o Thomas seja honesto.
Estamos confiando que o arquivo veio dele por causa do GPG, mas estamos confiando NELE por causa de sua reputação. E também porque é um software de código aberto. A carteira Electrum é uma das mais tradicionais e está sendo usada desde 2011. Não vá sair baixando coisas desenvolvidas por um cara aleatório na internet que ninguém conhece. Usei a Electrum como exemplo, mas isso se aplica a tudo.
É a primeira vez que tento escrever uma explicação e não sei se fui tão claro assim. Acabei escrevendo demais porque queria explicar tudo em detalhes para todos entenderem. Qualquer dúvida ou sugestão de alteração ou correção, usem os comentários ou o e-mail.
Saindo da Falha, Wednesday, 26/02/2025 16:09
Comentários:
Powered by HTML Comment Box.