Skip to content
ecdsa.com
GnuPG (gpg --verify, git verify-commit / verify-tag)Git

Error message

gpg: BAD signature from "Release Bot <release@example.com>" [ultimate]

Also printed as

  • gpg: BAD signature from "Release Bot <release@example.com>" [unknown]

The user ID in quotes and the trust level in brackets (`[ultimate]`, `[full]`, `[unknown]`) come from your keyring.

What it means

gpg had the signer's public key and checked the signature, and the check failed: the data is not what the key holder signed. Unlike "No public key", this is a definitive negative result — the file or object was changed after signing, or the signature belongs to different data. Treat the content as untrusted. The bracketed word is your trust level for the key, not part of the verdict.

Why it happens

How to fix it

  1. 1.

    Get both files again and re-verify

    If the result stays BAD with files obtained over a trustworthy channel, do not use the content and notify the publisher.

    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. 2.

    Protect signed text files from conversion

    Mark signature and checksum files as binary in `.gitattributes` so line-ending conversion never touches them.

    text
    # .gitattributes: never convert line endings of signed files
    *.asc  -text
    *.sig  -text
    SHA256SUMS -text

Related errors

Browse the full signature error database