Mensaje de error
Signature verification failed: incorrect signature
También se muestra como
- Couldn't verify signature: namespace does not match
- Could not verify signature.
Un principal que no figura en el archivo de firmantes permitidos para esta clave falla solo con «Could not verify signature.» (sin ninguna línea de detalle antes).
OpenSSH ssh-keygen -Y verify (SSHSIG) — also used by Git for SSH-signed commits
Qué significa
`ssh-keygen -Y verify` comprobó una firma SSHSIG y la verificación criptográfica falló: los datos leídos de la entrada estándar no son exactamente los que se firmaron, o la firma se hizo con otra clave. Las firmas SSH también quedan vinculadas a un espacio de nombres (`file`, `git`, `email`…); una firma verificada con otro espacio de nombres falla con «namespace does not match» antes de la comprobación criptográfica. Cada fallo va seguido de «Could not verify signature.».
Por qué ocurre
Los datos verificados no son los firmados
frecuenteUn archivo modificado, un final de línea distinto (`\r\n` frente a `\n`), un salto de línea final que añadió un editor o la verificación del archivo equivocado. SSHSIG firma un hash de los bytes exactos.
Espacio de nombres incorrecto
frecuenteLas firmas creadas con `-n file` no se pueden verificar con `-n git`, y Git siempre usa `git`. Los espacios de nombres impiden que una firma hecha para un propósito se reutilice para otro.
Identidad o clave que no está en allowed_signers
ocasional`-I` indica un principal que el archivo de firmantes permitidos no asocia con la clave de firma, o bien la clave se rotó y el archivo sigue incluyendo la antigua.
Cómo solucionarlo
- 1.
Verificar los bytes exactos con el espacio de nombres correcto
Pasa el archivo original por una tubería a `ssh-keygen -Y verify` y usa el espacio de nombres con el que se firmó. `find-principals` muestra a qué identidad corresponde la clave.
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 la criptografía de la confianza
`check-novalidate` verifica la firma sin consultar los firmantes permitidos. Si pasa, el problema está en la asociación de identidades; si falla, lo incorrecto son los datos o la firma.
bash ssh-keygen -Y check-novalidate -n file -s release.txt.sig < release.txt # signature valid at all (no trust check)?
Errores 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)