GnuPG (gpg --verify, git verify-commit / verify-tag)Git
エラーメッセージ
gpg: BAD signature from "Release Bot <release@example.com>" [ultimate]
別の表記
- gpg: BAD signature from "Release Bot <release@example.com>" [unknown]
引用符で囲まれたユーザー ID と、角かっこで囲まれた信頼レベル(`[ultimate]`、`[full]`、`[unknown]`)は、キーリングから取得されたものです。
このエラーの意味
gpg は署名者の公開鍵を持っており、署名を検証しましたが、検証に失敗しました。データは、鍵の保有者が署名したものと一致しません。「No public key」とは異なり、これは確定した否定的な結果です。ファイルやオブジェクトが署名後に変更されたか、署名が別のデータに対するものです。内容は信頼できないものとして扱ってください。角かっこ内の語は、その鍵に設定した信頼レベルであり、判定の一部ではありません。
発生する理由
署名後にデータが変更された
よくある改ざんされたダウンロードファイル、編集されたチェックサムファイル、または署名し直さずに書き換えられたコミットオブジェクトです。署名はまさにこれを明らかにするために存在します。
改行コードや文字コードが変換された
よくあるGit の `autocrlf`、ASCII モードの FTP、末尾に改行を追加するエディターは、テキストファイルのバイト列を変更します。そのため、元のバイト列に対する分離署名が一致しなくなります。
署名とファイルが対応していない
ときどきあるリリースの `.asc` を別のリリースのファイルに対して検証している場合や、tar アーカイブ用の署名をチェックサムファイルに対して検証している場合です。
修正方法
- 1.
両方のファイルを取得し直して再検証する
信頼できる経路で入手したファイルでも結果が BAD のままなら、その内容は使わず、公開元に知らせてください。
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.
署名済みのテキストファイルを変換から守る
`.gitattributes` で署名ファイルとチェックサムファイルをバイナリとして指定し、改行コードの変換が一切適用されないようにしてください。
text # .gitattributes: never convert line endings of signed files *.asc -text *.sig -text SHA256SUMS -text
関連するエラー
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)