Mensagem de erro
gpg: BAD signature from "Release Bot <release@example.com>" [ultimate]
Também aparece como
- gpg: BAD signature from "Release Bot <release@example.com>" [unknown]
O ID de usuário entre aspas e o nível de confiança entre colchetes (`[ultimate]`, `[full]`, `[unknown]`) vêm do seu chaveiro.
O que significa
O gpg tinha a chave pública do signatário e verificou a assinatura, e a verificação falhou: os dados não são o que o portador da chave assinou. Ao contrário de “No public key”, este é um resultado negativo definitivo — o arquivo ou o objeto foi alterado depois de assinado, ou a assinatura pertence a outros dados. Trate o conteúdo como não confiável. A palavra entre colchetes é o seu nível de confiança na chave, e não parte do veredito.
Por que acontece
Os dados foram alterados depois de assinados
comumUm download adulterado, um arquivo de checksum editado ou um objeto de commit reescrito sem ser assinado de novo. É exatamente isso que a assinatura existe para revelar.
As quebras de linha ou a codificação foram convertidas
comumO `autocrlf` do Git, o FTP em modo ASCII ou um editor que adiciona uma quebra de linha no final alteram os bytes dos arquivos de texto, e uma assinatura separada (detached) feita sobre os bytes originais deixa de corresponder.
A assinatura e o arquivo não correspondem
ocasionalUm `.asc` de uma versão verificado com o arquivo de outra, ou uma assinatura do tarball conferida com o arquivo de checksum.
Como corrigir
- 1.
Baixar os dois arquivos de novo e verificar outra vez
Se o resultado continuar BAD com arquivos obtidos por um canal confiável, não use o conteúdo e avise quem o publicou.
bash # Fetch both files again over a verified channel and compare sha256sum release.tar.sha256 curl -sSLO https://example.com/downloads/release.tar.sha256 curl -sSLO https://example.com/downloads/release.tar.sha256.asc gpg --verify release.tar.sha256.asc release.tar.sha256 - 2.
Proteger arquivos de texto assinados contra conversão
Marque os arquivos de assinatura e de checksum como binários no `.gitattributes`, para que a conversão de quebras de linha nunca os altere.
text # .gitattributes: never convert line endings of signed files *.asc -text *.sig -text SHA256SUMS -text
Erros relacionados
gpg: Can't check signature: No public keyGnuPG (gpg --verify, git verify-commit / verify-tag / log --show-signature)Signature verification failed: incorrect signatureOpenSSH ssh-keygen -Y verify (SSHSIG)invalid signature when validating ASN.1 encoded signatureSigstore cosign (verify-blob / verify with --key)