署名済みコミットとは?
署名済みコミットは暗号署名を伴い、そのコミットが本当に主張された作者から来たものであり、改ざんされていないことを証明します。
署名済みコミットは Git の履歴に信頼のレイヤーを加えます。誰でもコミットに任意の名前とメールアドレスを設定できるため、作者フィールドだけでは何も証明できません。GPG、SSH、その他の鍵を使った暗号署名によって、コミットが本当にあなたから来たものであることを他者が検証できます。
署名が重要な理由
Git では任意の作者情報を設定できるため、誰かに帰属されたコミットが実際にはその人のものでないことがあります。署名はこのギャップを埋めます。署名は本当の作者だけが管理する鍵に結び付いているため、検証済みの署名は真正性の強力な証拠であり、コミットが改ざんされていないことの証拠でもあります。
署名済みコミットの作成
署名鍵を設定しておけば、コミットに署名でき、他者がそれを検証できます。
Signing and verifying a commit
git commit -S -m "Add billing webhook handler"
git log --show-signature -1検証の仕組み
署名は作者の公開鍵と照合されます。ホスティングプラットフォームは、コミットの署名が作者の登録した鍵と一致すると検証済みバッジを表示します。ツールを自動署名するよう設定すれば、行うすべてのコミットがデフォルトで信頼できるものになります。
CI/CD における署名済みコミット
サプライチェーンを意識したパイプラインでは、CI はコミットとタグに署名を要求し、署名のないものを拒否できるため、検証済みのコードだけがビルドおよびリリースされるようになります。署名済みのリリースタグと組み合わせることで、作者から出荷される artifact までの証明可能な管理の連鎖が得られます。これは安全なソフトウェア配信への高まりつつある期待です。
署名のベストプラクティス
- 署名鍵を設定し、自動署名を有効にします。
- 公開鍵をホスティングプラットフォームに登録します。
- 完全な来歴のために、コミットだけでなくリリースタグにも署名します。
- 機密性の高いリポジトリでは CI で署名チェックを強制します。
重要なポイント
- 署名済みコミットはその作者と完全性を暗号的に証明します。
- 検証は署名を作者の公開鍵と照合します。
- CI はサプライチェーンのセキュリティのために署名済みのコミットとタグを要求できます。
関連ガイド
What Is a Git Commit?What is a Git commit? An explainer covering what a commit records, its message and hash, how commits form his…
What Is a Commit SHA?What is a commit SHA? Learn how Git derives a unique hash for each commit, how short SHAs work, and why pinni…
What Is a Release Tag?What is a release tag? Learn how version tags mark shippable commits, how semantic versioning structures them…