Mensagem de erro
Signature verification failed: incorrect signature
Também aparece como
- Couldn't verify signature: namespace does not match
- Could not verify signature.
Um principal que não está listado no arquivo de signatários permitidos (allowed signers) para esta chave falha só com “Could not verify signature.” (sem uma linha de detalhe antes).
OpenSSH ssh-keygen -Y verify (SSHSIG) — also used by Git for SSH-signed commits
O que significa
O `ssh-keygen -Y verify` conferiu uma assinatura SSHSIG e a verificação criptográfica falhou: os dados lidos da entrada padrão não são exatamente o que foi assinado, ou a assinatura foi feita por outra chave. Assinaturas SSH também ficam vinculadas a um namespace (`file`, `git`, `email`…); uma assinatura verificada com outro namespace falha com “namespace does not match” antes da checagem criptográfica. Toda falha é seguida de “Could not verify signature.”.
Por que acontece
Os dados verificados diferem dos dados assinados
comumUm arquivo modificado, uma terminação de linha diferente (`\r\n` ou `\n`), uma quebra de linha final adicionada por um editor ou a verificação do arquivo errado. O SSHSIG assina um hash dos bytes exatos.
Namespace errado
comumAssinaturas criadas com `-n file` não podem ser verificadas com `-n git`, e o Git sempre usa `git`. Os namespaces impedem que uma assinatura feita para uma finalidade seja reutilizada para outra.
Identidade ou chave fora do allowed_signers
ocasional`-I` indica um principal que o arquivo de signatários permitidos não associa à chave de assinatura, ou a chave passou por rotação e o arquivo ainda lista a antiga.
Como corrigir
- 1.
Verificar os bytes exatos com o namespace correto
Envie o arquivo original por pipe para `ssh-keygen -Y verify` e use o namespace usado na assinatura. `find-principals` mostra a qual identidade a chave corresponde.
bash # Verify exactly the bytes that were signed, with the namespace used at signing time ssh-keygen -Y verify -f allowed_signers -I release@example.com -n file -s release.txt.sig < release.txt # Which principal does the allowed_signers file map this signature's key to? ssh-keygen -Y find-principals -f allowed_signers -s release.txt.sig - 2.
Separar criptografia de confiança
`check-novalidate` verifica a assinatura sem consultar os signatários permitidos. Se passar, o problema está no mapeamento de identidades; se falhar, os dados ou a assinatura estão errados.
bash ssh-keygen -Y check-novalidate -n file -s release.txt.sig < release.txt # signature valid at all (no trust check)?
Erros relacionados
error: gpg.ssh.allowedSignersFile needs to be configured and exist for ssh sign…Git (verify-commit, log --show-signature, merge --verify-signatures) with gpg.format=sshinvalid signature when validating ASN.1 encoded signatureSigstore cosign (verify-blob / verify with --key)gpg: BAD signature from "Release Bot <release@example.com>" [ultimate]GnuPG (gpg --verify, git verify-commit / verify-tag)