Verificando assinaturas digitais: Decred
Não instale ou use aplicativos sem verificar assinaturas digitais.
1. Introdução
A verificação de assinaturas digitais serve para garantir que uma mensagem ou arquivo não foi alterado e que seu autor é realmente quem ‘assinou’ a mensagem, ou seja, o dono do par de chaves criptográficas para o qual se conhece e confia na chave pública.
Para saber mais sobre o processo leia o artigo Verificação de assinaturas digitais.
Veja aqui o Decred Verifier, um script em shell ou Python que automatiza o processo de verificação de assinatura digital.
2. Assinatura digital: Decred
2.1. Processo de assinatura
a) É gerado um hash (digest) dos pacotes do Decred, aqui representados por package.tar.gz
(GZIP, no diagrama)
b) O hash é armazenado em um arquivo de texto manifest-decrediton-$VERSION.txt
para o Decrediton e manifest-$VERSION.txt
para os outros pacotes.
c) O manifest manifest-decrediton-$VERSION.txt
é assinado com a chave privada de quem está publicando o arquivo. Isso significa que o processo gera um hash para o arquivo do manifest, e esse hash será criptografado com a chave privada dos desenvolvedores do Decred e armazenado em outro arquivo, manifest-decrediton-$VERSION.txt.asc
. No final do processo temos o arquivo package.tar.gz
, o manifest manifest-decrediton-$VERSION.txt
e a assinatura do manifest manifest-decrediton-$VERSION.txt.asc
.
Figura 3 - Processo de assinatura digital com manifest
2.2. Verificação da assinatura
a) O processo de verificação gera um hash do manifest manifest-decrediton-$VERSION.txt
.
b) O hash assinado (criptografado) do manifest ``manifest-decrediton-$VERSION.txt.asc` é descriptografado usando a chave pública do remetente e obtém-se o hash original. Se os hashes são iguais, a mensagem não foi alterada e o remetente é quem realmente achamos que é, pois a chave pública usada não poderia descriptografar algo criptografado com uma chave privada de outro par. Na criptografia assimétrica o que é feito com uma chave só pode ser desfeito ou verificado com a outra chave do mesmo par.
c) O usuário gera um hash do arquivo package.tar.gz
(GZIP, no diagrama) e compara com o hash armazenado dentro do manifest manifest-decrediton-$VERSION.txt
. Se os hashes são iguais, o arquivo não foi modificado de forma não autorizada.
Figura 4 - Processo de verificação de assinatura digital com manifest
3. Verificação dos arquivos
Não instale ou use aplicativos sem verificar assinaturas digitais.
Abaixo estão descritos os passos necessários para verificar a autenticidade do Decrediton. Essas etapas podem ser usadas para verificar qualquer outro aplicativo copiado da Internet. Basta apenas importar a chave pública dos desenvolvedores (essa informação constará do site). A importação da chave pública é uma etapa que raramente ocorre, somente no caso de um par de chaves ser revogado ou substituido.
Veja aqui o Decred Verifier, um script em shell ou Python que automatiza o processo de verificação de assinatura digital.
3.1. No Mac
a) Acesse https://github.com/decred/decred-binaries/releases/
b) Baixe para a mesma pasta os arquivos decrediton-$VERSION.dmg
, manifest-decrediton-$VERSION.txt
e manifest-decrediton-$VERSION.txt.asc
c) Caso a chave ainda não tenha sido importada (erro: ‘gpg: Can’t check signature: No public key’): importe a chave pública dos desenvolvedores (o GPG tentará sair pela porta TCP/11371):
$ gpg --keyserver pgp.mit.edu --recv-keys 0x518A031D
d) Certifique-se de que a chave correta foi importada:
gpg: key 6DF634AA7608AF04: public key "Decred Release <release@decred.org>" imported
e) Verifique a assinatura digital:
$ gpg --verify manifest-decrediton-$VERSION.txt.asc
gpg: assuming signed data in 'manifest-decrediton-v1.1.3.txt'
gpg: Signature made Thu Dec 21 17:15:58 2017 WET
gpg: using RSA key 6D897EDF518A031D
gpg: Good signature from "Decred Release <release@decred.org>" [unknown]
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: FD13 B683 5E24 8FAF 4BD1 838D 6DF6 34AA 7608 AF04
Subkey fingerprint: F516 ADB7 A069 852C 7C28 A02D 6D89 7EDF 518A 031D
f) Procure no retorno do gpg por: “using RSA key 6D897EDF518A031D” (apenas na primeira verificação após importar a chave). Repare que a segunda metade do ID da RSA key está na etapa c) e no texto ‘Good signature from “Decred Release ”’
g) Para verificar o hash e comparar manualmente com o conteúdo de manifest-decrediton-$VERSION.txt
:
$ shasum -a 256 decrediton-$VERSION.dmg
$ cat manifest-decrediton-$VERSION.txt
Para automatizar o processo e executar apenas uma linha de comando:
$ grep `shasum -a 256 decrediton-$VERSION.dmg` manifest-decrediton-$VERSION.txt
Se não houver retorno é porque o hash do arquivo não foi encontrado no manifest e isso é um problema.
h) Monte o arquivo DMG e copie o novo Decrediton para Applications.
Referência: https://docs.decred.org/advanced/verifying-binaries/
Obs.: Se você não tem o gpg, acesse: https://gpgtools.org/
Web of Trust
O warning na etapa e) com a mensagem sobre a chave não ser certificada com uma assinatura confiável está relacionado ao PGP Web of Trust. Num modelo descentralizado não existe uma autoridade central como a Autoridade Certificadora na ICP que possa dizer se a chave realmente pertence a um usuário (validação da identidade). Então o modelo web of trust se baseia em uma chave ser ‘assinada’ pela chave de um usuário que já é confiável do sistema, criando assim uma ‘teia de confiança’ (web of trust). Esse warning é normal considerando que eu não tenho no sistema alguém que já confie na chave dos devs do Decred.
3.2. No Debian
a) Acesse https://github.com/decred/decred-binaries/releases/
b) Baixe para a mesma pasta os arquivos decrediton-$VERSION.deb
, manifest-decrediton-$VERSION.txt
e manifest-decrediton-$VERSION.txt.asc
c) Caso a chave ainda não tenha sido importada (erro: ‘gpg: Can’t check signature: No public key’): importe a chave pública dos desenvolvedores (o GPG tentará sair pela porta TCP/11371):
$ gpg --keyserver pgp.mit.edu --recv-keys 0x518A031D
Em caso de erro ‘gpg: keyserver receive failed: No dirmngr’:
$ sudo apt-get install dirmngr
d) Certifique-se de que a chave correta foi importada:
gpg: key 6DF634AA7608AF04: public key "Decred Release <release@decred.org>" imported
e) Verifique a assinatura digital:
$ gpg --verify manifest-decrediton-$VERSION.txt.asc
gpg: assuming signed data in 'manifest-decrediton-v1.1.3.txt'
gpg: Signature made Thu Dec 21 17:15:58 2017 WET
gpg: using RSA key 6D897EDF518A031D
gpg: Good signature from "Decred Release <release@decred.org>" [unknown]
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: FD13 B683 5E24 8FAF 4BD1 838D 6DF6 34AA 7608 AF04
Subkey fingerprint: F516 ADB7 A069 852C 7C28 A02D 6D89 7EDF 518A 031D
f) Procure no retorno do gpg por: “using RSA key 6D897EDF518A031D” (apenas na primeira verificação após importar a chave). Repare que a segunda metade do ID da RSA key está na etapa c) e no texto ‘Good signature from “Decred Release ”’
g) Para verificar o hash e comparar manualmente com o conteúdo de manifest-decrediton-$VERSION.txt
:
$ sha256sum decrediton-$VERSION.deb
$ cat manifest-decrediton-$VERSION.txt
Para automatizar o processo e executar apenas uma linha de comando:
$ grep `sha256sum decrediton-$VERSION.deb` manifest-decrediton-$VERSION.txt
Se não houver retorno é porque o hash do arquivo não foi encontrado no manifest isso significa que o arquivo pode ter sido modificado após a sua criação.
h) Para instalar use:
$ dpkg -i decrediton-$VERSION.deb
Sobre o warning no output do GPG: Veja sobre o Web of Trust na seção 3.1.
Referência: https://docs.decred.org/advanced/verifying-binaries/
Obs.: Se você não tem o gpg, acesse: https://gpgtools.org/
3.3. Em outro Linux (e também no Debian)
a) Acesse https://github.com/decred/decred-binaries/releases/
b) Baixe para a mesma pasta os arquivos decrediton-$VERSION.tar.gz
, manifest-decrediton-$VERSION.txt
e manifest-decrediton-$VERSION.txt.asc
c) Caso a chave ainda não tenha sido importada (erro: ‘gpg: Can’t check signature: No public key’): importe a chave pública dos desenvolvedores (o GPG tentará sair pela porta TCP/11371):
$ gpg --keyserver pgp.mit.edu --recv-keys 0x518A031D
Em caso de erro ‘gpg: keyserver receive failed: No dirmngr’:
$ sudo apt-get install dirmngr
d) Certifique-se de que a chave correta foi importada:
gpg: key 6DF634AA7608AF04: public key "Decred Release <release@decred.org>" imported
e) Verifique a assinatura digital:
$ gpg --verify manifest-decrediton-$VERSION.txt.asc
gpg: assuming signed data in 'manifest-decrediton-v1.1.3.txt'
gpg: Signature made Thu Dec 21 17:15:58 2017 WET
gpg: using RSA key 6D897EDF518A031D
gpg: Good signature from "Decred Release <release@decred.org>" [unknown]
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: FD13 B683 5E24 8FAF 4BD1 838D 6DF6 34AA 7608 AF04
Subkey fingerprint: F516 ADB7 A069 852C 7C28 A02D 6D89 7EDF 518A 031D
f) Procure no retorno do gpg por: “using RSA key 6D897EDF518A031D” (apenas na primeira verificação após importar a chave). Repare que a segunda metade do ID da RSA key está na etapa c) e no texto ‘Good signature from “Decred Release ”’
g) Para verificar o hash e comparar manualmente com o conteúdo de manifest-decrediton-$VERSION.txt
:
$ sha256sum decrediton-$VERSION.tar.gz
$ cat manifest-decrediton-$VERSION.txt
Para automatizar o processo e executar apenas uma linha de comando:
$ grep `sha256sum decrediton-$VERSION.tar.gz` manifest-decrediton-$VERSION.txt
Se não houver retorno é porque o hash do arquivo não foi encontrado no manifest isso significa que o arquivo pode ter sido modificado após a sua criação.
h) Não é necessário instalar. Descompacte; entre no diretório; execute:
$ tar -xvzf decrediton-$VERSION.tar.gz
$ cd decrediton-$VERSION
$ ./decrediton
Sobre o warning no output do GPG: Veja sobre o Web of Trust na seção 3.1.
Referência: https://docs.decred.org/advanced/verifying-binaries/
Obs.: Se você não tem o gpg, acesse: https://gpgtools.org/
3.4. No Windows
a) Acesse https://github.com/decred/decred-binaries/releases/
b) Baixe para a mesma pasta os arquivos decrediton-$VERSION.exe
, manifest-decrediton-$VERSION.txt
e manifest-decrediton-$VERSION.txt.asc
c) Caso a chave ainda não tenha sido importada (erro: ‘gpg: Can’t check signature: No public key’): importe a chave pública dos desenvolvedores (o GPG tentará sair pela porta TCP/11371):
> gpg --keyserver pgp.mit.edu --recv-keys 0x518A031D
d) Certifique-se de que a chave correta foi importada:
gpg: key 6DF634AA7608AF04: public key "Decred Release <release@decred.org>" imported
e) Verifique a assinatura digital:
> gpg --verify manifest-decrediton-$VERSION.txt.asc
gpg: assuming signed data in 'manifest-decrediton-v1.1.3.txt'
gpg: Signature made Thu Dec 21 17:15:58 2017 WET
gpg: using RSA key 6D897EDF518A031D
gpg: Good signature from "Decred Release <release@decred.org>" [unknown]
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: FD13 B683 5E24 8FAF 4BD1 838D 6DF6 34AA 7608 AF04
Subkey fingerprint: F516 ADB7 A069 852C 7C28 A02D 6D89 7EDF 518A 031D
f) Procure no retorno do gpg por: “using RSA key 6D897EDF518A031D” (apenas na primeira verificação após importar a chave). Repare que a segunda metade do ID da RSA key está na etapa c) e no texto ‘Good signature from “Decred Release ”’
g) O Windows não possui uma ferramenta nativa para verificação de hash SHA256. Usuários de Windows podem tentar a ferramenta PowerShell File Checksum Integrity Verifier (PsFCIV) disponível na Microsoft Technet.
Sobre o warning no output do GPG: Veja sobre o Web of Trust na seção 3.1.
Referência: https://docs.decred.org/advanced/verifying-binaries/
Obs.: Se você não tem o gpg, acesse: https://gpgtools.org/