O que acontece quando você verifica uma assinatura separada?

3

Estou tentando entender o que acontece ao verificar uma assinatura gpg separada.

Veja um exemplo do manual do gnupg:

blake% gpg --verify doc.sig doc
gpg: Signature made Fri Jun  4 12:38:46 1999 CDT using DSA key ID BB7576AC
gpg: Good signature from "Alice (Judge) <[email protected]>"

Como o gpg determina se a assinatura é boa? A assinatura contém um hash do arquivo que foi assinado? Se sim, como você extrai esse hash da própria assinatura?

Eu tentei gpg --list-packets <signature> , mas parece não mostrar informações completas.

    
por SauceCode 23.05.2016 / 14:20

3 respostas

4

Você pode usar a opção --list-packets para obter uma cópia do que está em um arquivo gpg. A descrição do formato do arquivo é RFC 4880 (padrão OpenPGP).

A assinatura não contém diretamente um hash. Ele contém informações que permitem verificar tanto o hash quanto o remetente: existe um algoritmo de verificação de assinaturas , que recebe um valor de hash e uma chave pública como entrada e retorna yes ou não ; o algoritmo retorna sim se a assinatura foi feita pela chave privada correspondente à chave pública dada de uma mensagem com a chave privada dada, e retorna não em todas as outras circunstâncias ( assinatura de um hash diferente, assinatura feita por uma chave diferente, ou um monte de bytes que não pode ser uma assinatura em tudo). Sob o algoritmo DSA , acho inviável extrair o hash de uma assinatura se você não tiver a chave privada.

O arquivo de assinatura contém a identidade do signatário, bem como o valor da assinatura. Para verificar a assinatura, o gpg lê a chave pública do assinante do seu chaveiro, calcula o hash dos dados e aplica o algoritmo de verificação de assinaturas.

    
por 24.05.2016 / 02:50
1
$ gpg --list-packets myfile.asc
[...]
       digest algo 10, begin of digest 77 dd

Isso mostra qual algoritmo de resumo foi usado. Infelizmente nem a página de manual nem gpg --version nos informam qual algoritmo é atribuído a qual ID. Precisamos mergulhar na RFC do formato de pacote para encontrar essas informações: link

ID           Algorithm                             Text Name
--           ---------                             ---------
1          - MD5 [HAC]                             "MD5"
2          - SHA-1 [FIPS180]                       "SHA1"
3          - RIPE-MD/160 [HAC]                     "RIPEMD160"
4          - Reserved
5          - Reserved
6          - Reserved
7          - Reserved
8          - SHA256 [FIPS180]                      "SHA256"
9          - SHA384 [FIPS180]                      "SHA384"
10         - SHA512 [FIPS180]                      "SHA512"
11         - SHA224 [FIPS180]                      "SHA224"
100 to 110 - Private/Experimental algorithm
    
por 19.09.2017 / 13:41
0

Sim, as assinaturas digitais são geralmente hashes seguros, que são assinados pela chave secreta do signatário.

Assinar a mensagem inteira é muito mais lento e não mais seguro. Além disso, o algoritmo deve cuidar do comprimento dos blocos, preenchimento (de maneira a não divulgar muita informação), etc.

Nota: também na criptografia assimétrica, por motivo de velocidade, apenas uma chave simétrica efêmera é criptografada assimétrica, e o restante da mensagem é apenas simétrica criptografada.

    
por 23.05.2016 / 16:21

Tags