Message d’erreur
Signature verification failed: incorrect signature
Également affiché sous la forme
- Couldn't verify signature: namespace does not match
- Could not verify signature.
Un principal qui ne figure pas dans le fichier des signataires autorisés pour cette clé échoue avec le seul message « Could not verify signature. » (aucune ligne de détail ne le précède).
OpenSSH ssh-keygen -Y verify (SSHSIG) — also used by Git for SSH-signed commits
Ce que cela signifie
`ssh-keygen -Y verify` a contrôlé une signature SSHSIG et la vérification cryptographique a échoué : les données lues sur l’entrée standard ne sont pas exactement celles qui ont été signées, ou la signature a été produite par une autre clé. Les signatures SSH sont aussi liées à un espace de noms (`file`, `git`, `email`…) ; une signature vérifiée sous un autre espace de noms échoue avec « namespace does not match » avant la vérification cryptographique. Chaque échec est suivi de « Could not verify signature. ».
Pourquoi cela se produit
Les données vérifiées diffèrent des données signées
fréquenteUn fichier modifié, une fin de ligne différente (`\r\n` ou `\n`), un saut de ligne final ajouté par un éditeur, ou la vérification du mauvais fichier. SSHSIG signe un condensat des octets exacts.
Mauvais espace de noms
fréquenteLes signatures créées avec `-n file` ne peuvent pas être vérifiées avec `-n git`, et Git utilise toujours `git`. Les espaces de noms empêchent qu’une signature produite dans un but soit réutilisée dans un autre.
Identité ou clé absente du fichier allowed_signers
occasionnelle`-I` désigne un principal que le fichier des signataires autorisés n’associe pas à la clé de signature, ou bien la clé a été remplacée et le fichier mentionne encore l’ancienne.
Comment corriger l’erreur
- 1.
Vérifier les octets exacts avec le bon espace de noms
Redirigez le fichier d’origine vers `ssh-keygen -Y verify` et utilisez l’espace de noms employé lors de la signature. `find-principals` indique à quelle identité la clé correspond.
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.
Séparer la cryptographie de la confiance
`check-novalidate` vérifie la signature sans consulter les signataires autorisés. Si cette vérification réussit, le problème vient de l’association des identités ; si elle échoue, ce sont les données ou la signature qui sont erronées.
bash ssh-keygen -Y check-novalidate -n file -s release.txt.sig < release.txt # signature valid at all (no trust check)?
Erreurs associées
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)