GitHubで署名付きコミットを設定する:SSH署名でVerifiedバッジを付ける
はじめに
GitHubのコミット一覧を見ると、一部のコミットに Verified というバッジが付いています。これが「署名付きコミット」です。
署名付きコミットは、コミットが本当にそのGitHubユーザー本人によって作成されたことを暗号的に証明します。
なぜ必要か
Gitはコミット時に名前とメールアドレスを自由に設定できます。
git config user.name "他人の名前" git config user.email "他人のメールアドレス"
この設定だけでは誰でも他人のふりをしてコミットできてしまいます。署名付きコミットはこれを防ぎ、コミットの真正性を保証します。
SSH署名の設定(推奨)
GitHubにSSHでアクセスしている場合、既存のSSH鍵をそのまま署名にも使えます。GPGより手順が少なく、入門者に向いています。
前提
SSH鍵がすでにあること(~/.ssh/id_ed25519 など)。なければ以下で生成します。
ssh-keygen -t ed25519 -C "your@email.com"
1. gitにSSH署名を使うよう設定する
# SSH署名を使用する git config --global gpg.format ssh # 署名に使う鍵を指定(公開鍵のパスを指定) git config --global user.signingkey ~/.ssh/id_ed25519.pub # すべてのコミットに自動で署名する git config --global commit.gpgsign true
~/.ssh/id_ed25519.pub の部分は自分の公開鍵のパスに合わせてください。
2. GitHubに署名用SSH鍵を登録する
GitHubのSSH認証鍵とは別に、署名専用として登録する必要があります。
- https://github.com/settings/keys を開く
- New SSH key をクリック
- Key type を
Authentication Key(認証用)ではなくSigning Keyに変更 - Titleに名前を入力(例:
MacBook Pro signing key) - 公開鍵の内容を貼り付けて Add SSH key をクリック
# 公開鍵の内容を確認するコマンド cat ~/.ssh/id_ed25519.pub
3. 動作確認
設定後にコミットするとVerifiedバッジが付くようになります。
git commit -m "test: signed commit"
ローカルでも署名を確認できます。
git log --show-signature -1
確認方法
GitHubにpush後、コミット一覧(/commits/main など)でVerifiedバッジが表示されます。
バッジをクリックすると、どの鍵で署名されたかが確認できます。
GPG署名の設定(補足)
GPGを使う場合は以下の手順です。
GPGキーを生成する
# GPGがなければインストール brew install gnupg # キーを生成(Ed25519推奨) gpg --full-generate-key
選択肢は以下を推奨します:
- キーの種類:
9(ECC(署名と認証)) - 楕円曲線:
1(Curve 25519) - 有効期限:任意(
0で無期限)
gitにGPGキーを設定する
# キーIDを確認 gpg --list-secret-keys --keyid-format=long # 出力例: # sec ed25519/ABCDEF1234567890 2024-01-01 # ^^^^^^^^^^^^^^ これがキーID # gitに設定 git config --global user.signingkey ABCDEF1234567890 git config --global commit.gpgsign true
GitHubにGPG公開鍵を登録する
# 公開鍵をエクスポート gpg --armor --export ABCDEF1234567890
出力された -----BEGIN PGP PUBLIC KEY BLOCK----- から始まる内容を、https://github.com/settings/keys の New GPG key から登録します。
SSH署名 vs GPG署名
| SSH署名 | GPG署名 | |
|---|---|---|
| 設定の手間 | 少ない(既存鍵を流用) | 多い(GPGキー生成が必要) |
| 鍵の管理 | SSH鍵と一元管理 | GPG鍵として別管理 |
| GitHub対応 | 2022年以降対応 | 長年対応 |
| 推奨度 | ★★★ | ★★ |
特別な理由がなければSSH署名が手軽でおすすめです。
まとめ
| 手順 | 内容 |
|---|---|
| 1 | git config --global gpg.format ssh でSSH署名モードに設定 |
| 2 | git config --global user.signingkey ~/.ssh/id_ed25519.pub で鍵を指定 |
| 3 | git config --global commit.gpgsign true で自動署名を有効化 |
| 4 | GitHubの Settings → SSH keys に Signing Key として公開鍵を登録 |
設定後のコミットにはVerifiedバッジが付き、コミットの真正性がGitHub上で確認できるようになります。