Verificando assinaturas digitais: Decred

8 minutos de leitura

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
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
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/