GitHubのコミット履歴を見ていると、一部のコミットに緑色の「Verified」マークがついているのを見かけたことはないでしょうか。これは、そのコミットが偽装されたものではなく、正当な作成者によって作成・署名されたものであることを示しています。
Gitはデフォルトの状態では、user.name と user.email を自由に偽ってコミットを作成できてしまいます。つまり、なりすましが容易に可能です。これを防ぎ、セキュリティ担保や信頼性の証明を行うために推奨されているのがコミット署名です。
本記事では、GPG鍵やSSH鍵を使ってGitコミットに署名を行い、GitHub上で「Verified」マークを表示させるための設定手順を分かりやすく解説します。
1. コミット署名とは?
Gitにおけるコミット署名とは、暗号鍵(GPG鍵またはSSH鍵)を使ってコミットデータに対してデジタル署名を付与するプロセスです。
これにより、以下の2点が保証されます。
- 改ざんの防止: コミットされたデータが後から改ざんされていないこと。
- 本人性の証明: 設定したメールアドレスを持つ本人がコミットを作成したこと。
以前はGPG(GNU Privacy Guard)鍵を使うのが一般的でしたが、現在は普段SSH接続に使っているSSH鍵を使って手軽に署名を行うことも可能になりました。今回はより設定がシンプルな「SSH鍵を用いた署名方法」を中心に解説します。
2. SSH鍵を使用したコミット署名の手順
ステップ1:既存のSSH鍵を確認または作成する
署名に使用するSSH公開鍵のパス(例: ~/.ssh/id_ed25519.pub)を確認します。まだ作成していない場合は、以下のコマンドで作成します。
ssh-keygen -t ed25519 -C "[email protected]"
ステップ2:Gitの署名形式をSSHに設定する
Gitに対して、GPGの代わりにSSHを使用して署名を行うようにグローバル設定を変更します。
# 署名形式をSSHに設定
git config --global gpg.format ssh
# 署名に使用する公開鍵(または公開鍵の文字列)を指定
git config --global user.signingkey ~/.ssh/id_ed25519.pub
ステップ3:自動署名を有効化する
毎回のコミットで手動で署名オプションを指定するのは手間であるため、コミット時に自動的に署名が行われるように設定します。
git config --global commit.gpgsign true
3. GitHubへの登録
署名されたコミットをGitHubに送信した際、GitHubがその署名を検証できるように、使用したSSH公開鍵をGitHubアカウントに登録する必要があります。
~/.ssh/id_ed25519.pubの内容をコピーします。- GitHubにログインし、Settings > SSH and GPG keys に移動します。
- New SSH Key をクリックします。
- Key type ドロップダウンメニューから “Signing Key”(認証用の「Authentication Key」ではない点に注意)を選択します。
- コピーした公開鍵の内容を貼り付け、保存します。
4. 署名の動作確認
設定完了後、通常通りコミットを作成してみましょう。
git commit -m "feat: setup commit signing"
このとき、鍵のパスフレーズの入力を求められる場合があります。
コミット後に、ログを確認して署名情報が含まれているか検証します。
git log --show-signature -n 1
出力結果の中に Good "git" signature for [email protected] のような記述があれば、正しく署名が行われています。
このコミットをGitHubにプッシュすると、コミット履歴の横に誇らしげに緑色の「Verified」バッジが表示されるようになります。
まとめ
コミットの署名は、なりすましを防ぐだけで十分だと思われがちですが、オープンソース開発や企業のセキュリティポリシー(サプライチェーン攻撃への対策など)において、ますます必須要件となってきています。
SSH鍵を使えば、新しいツールのインストールや複雑なキーの管理を行うことなく、数ステップで設定を完了できます。ご自身のPC環境でぜひセットアップしてみてください。
