É possível solicitar ao gpg (ou gpg4win) apenas para verificar se um arquivo foi assinado por um arquivo de chave pública específico, sem precisar importar, assinar e confiar nessa chave?
ou seja, algo como
gpg --using-key pubkey.txt --verify message.txt
em vez de ter que criar sua própria chave privada e depois
gpg --import pubkey.txt
gpg --lsign-key [name within pubkey.txt]
# ... something to do with choosing trust levels
gpg --verify message.txt
gpg --status-fd 1 --verify (thefile)
fornece na saída como primeira sequência a impressão digital da chave que fez a assinatura.Respostas:
Você deve ter a chave pública para verificar uma assinatura feita com a chave privada correspondente, mas não precisa assinar nem assinar localmente a chave. Nesse caso, você receberá um aviso do GPG de que a chave não é confiável.
Aqui está um teste que eu fiz com um arquivo assinado por minha própria chave, mas em um sistema em que a chave não foi importada:
Infelizmente, a sugestão de Harry não funciona, ela extrai um pouco mais de informação, mas não o suficiente para ser útil.
Como você pode ver, o máximo de informações obtidas é o ID da chave da subchave usada para fazer a assinatura e a hora em que a assinatura foi feita. Isso corresponde aos dados disponíveis para o pgpdump (ou --list-packets):
Como você pode ver, ele fornece o algoritmo de hash, os detalhes do tipo de chave (minha chave de assinatura é uma subchave RSA de 3072 bits e o ID da chave, mas não há nada para identificar a chave mestra. revelado quando você tem a chave pública e verifica a assinatura.
Importei minha chave pública nesse sistema e tentei novamente:
Agora ele pode identificar a chave e combiná-la com a chave primária. É, no entanto, possível reduzir a natureza desses avisos como este:
Ainda há um aviso de que é uma chave não confiável, mas não massivamente, e a remoção da verbosidade a reduz apenas a isso:
A chave pública é necessária para o estágio de verificação porque é usada para corresponder os dados gerados pelo assinante com sua chave privada. Isso pode ser pensado, em termos simples, como o complemento da criptografia onde a chave privada é necessária para decodificar os dados criptografados na chave pública.
Nota: Ajustamos um pouco os UIDs neste exemplo, mas todos que obtiverem essa chave verão o que realmente são. Caso contrário, a saída será uma cópia e colagem direta.
EDIT: Você pode chamar o arquivo de chave pública diretamente como um chaveiro, se o tiver no formato blindado não ASCII (por exemplo, um arquivo .gpg em vez de um arquivo .asc). Mesmo assim, você ainda precisa da chave pública. Para fazer isso, o comando é assim:
fonte
Se você concorda em enviar um chaveiro, em vez de um arquivo de chave pública, provavelmente deseja usar, em
gpgv
vez degpg
:fonte
Se sua palavra "verificar" na pergunta significa "verificar absolutamente", é claro que uma chave pública deve ser importada para verificar completamente um documento assinado. No entanto, se isso significa "identificar", descrevo abaixo uma heurística que pode dizer se um grupo de documentos foi assinado pela mesma assinatura.
De acordo com os testes realizados pelo @Ben para verificar meu comentário, existe a possibilidade de o seguinte comando poder ser usado para indicar heuristicamente a chave de assinatura:
O teste de Ben deu o resultado abaixo. De notar os valores de ERRSIG e NO_PUBKEY e também o valor de "RSA key ID", que está parcialmente contido nos dois, da seguinte forma:
Observe acima da string
7FF2D37135C7553C
. Essa mesma sequência é encontrada dentro da impressão digital da chave que é relatada depois que a chave é importada:Essa sequência é encontrada como a parte inferior da impressão digital (subchave acima), portanto, pode ser usada para identificar a chave. Provavelmente, a "impressão digital da chave primária" também deve ser verificada, além da subchave.
A cadeia "RSA key ID" é idêntica nas duas saídas e também é encontrada como a última parte da impressão digital; portanto, é possível que seja suficiente por si só para identificar a assinatura. Se for esse o caso, usar apenas a saída de
gpg --verify
pode ser suficiente para identificar a assinatura de uma maneira mais simples.Meu conhecimento do GPG não é suficiente para validar completamente esse método; portanto, você deve experimentá-lo em mais arquivos de exemplo. Se funcionar, você poderá classificar os arquivos de acordo com as assinaturas, mas precisará importar a chave para encontrar a identidade do signatário.
Para declarar claramente novamente: Este método não pode identificar completamente uma assinatura. É apenas uma maneira de classificar heuristicamente os documentos assinados.
fonte