GitでGPGを使ってコミットに署名する
要約: GitコミットにGPG署名を付けてVerifiedバッジを表示する方法をまとめました。GnuPGのインストール、鍵の生成とエクスポート、git commitの自動署名設定、ローカル検証、GitHubへの公開鍵登録とエラー対応まで一度に確認できます。

概要
GitコミットにGPGデジタル署名を追加することで、コミット作成者の身元を証明し、コードの完全性を保証できます。
このドキュメントでは、GPGの概念とGitでの活用方法を紹介します。
GPGキーの生成からGitの設定、GitHubとの連携まで、全体の手順を段階的に案内します。
GPGとは?
GPG(GNU Privacy Guard)は、データ暗号化とデジタル署名のためのオープンソース暗号化ソフトウェアです。
PGP(Pretty Good Privacy)標準に従い、公開鍵暗号方式を使用します。
主な特徴
- 公開鍵暗号化: 公開鍵と秘密鍵のペアでデータを暗号化・復号します。
- デジタル署名: 秘密鍵でデータに署名します。作成者の身元とデータの完全性を保証します。
- セキュアな通信: メールやファイルなどを安全に暗号化して送信できます。
GitとGPG
GitでGPGはコミットやタグにデジタル署名を追加する際に使用します。
- コミットが実際に本人によって作成されたことを証明できます。
- GitHubやGitLabなどのプラットフォームでVerifiedバッジを表示し、信頼性を高めます。
- コードの改ざんや偽造を防ぎ、プロジェクトのセキュリティを強化します。
- ファイルを暗号化して保護します。
Gitコミットに署名する理由
Gitコミットの作成者情報は、git config user.nameとuser.emailで誰でも任意に設定できます。
そのため、名前とメールアドレスだけでは実際の作成者を信頼することが難しいです。
コミット前に秘密鍵でコミットに署名し、公開鍵をGitHubなどのリポジトリに登録することで、プラットフォームが署名を検証してコミット作成者が一致するかどうかを確認できます。
GPGを使う
gnupgのインストール
gnupg: GPGを使用するためのパッケージのインストール(例:Mac)
1brew install gnupg
キーの生成
gpg --full-generate-keyはデフォルトで対話型モードで動作します。バッチモードもオプションとしてサポートされています。
1gpg --full-generate-key
Please select what kind of key you want: (1) RSA and RSA (2) DSA and Elgamal (3) DSA (sign only) (4) RSA (sign only) (9) ECC (sign and encrypt) default (10) ECC (sign only) (14) Existing key from card Your selection? 1
RSA keys may be between 1024 and 4096 bits long. What keysize do you want? (3072) 4096
Requested keysize is 4096 bits Please specify how long the key should be valid. 0 = key does not expire <n> = key expires in n days <n>w = key expires in n weeks <n>m = key expires in n months <n>y = key expires in n years Key is valid for? (0) 1y
Key is valid for? (0) 1y Key expires at 2027년 2월 16일 화요일 17시 14분 10초 KST Is this correct? (y/N) y
GnuPG needs to construct a user ID to identify your key.
Real name: your name Email address: your [email protected] Not a valid email address Email address: [email protected] Comment: test You selected this USER-ID: “your name (test) [email protected]”

キー生成の確認
1# 秘密鍵の一覧
2gpg --list-secret-keys
3
4# 公開鍵の一覧
5gpg --list-keys
その他の必要な機能
キーの削除が必要な場合
1# 秘密鍵の削除
2gpg --delete-secret-keys {sec uuid}
3
4# 公開鍵の削除
5gpg --delete-keys {pub uuid}
キーのエクスポート
1# 秘密鍵のエクスポート
2# gpg --armor --export-secret-keys {key_id} > private.asc
3gpg --armor --export-secret-keys 7XXXXXXXXXXXXXXXX6 > private.asc
4
5# 公開鍵のエクスポート
6# gpg --armor --export {key_id} > public.asc
7gpg --armor --export 7XXXXXXXXXXXXXXXX6 > public.asc
キーの復元
1#
2gpg --import private.asc
3
4# trustの指定
5# gpg --edit-key {key_id}
6gpg --edit-key 7XXXXXXXXXXXXXXXX6
7
8# 登録確認
9gpg --list-secret-keys --keyid-format LONG
(参考)トラブルシューティング
エラー: パスフレーズ(キーの暗号)を使わないようにしようとしました。キー生成の途中でパスワード入力画面に戻りました。
原因
- 最新バージョンではキー漏洩のセキュリティリスクから、キーのパスフレーズ使用を強く推奨しています。
- バッチモードなどで回避する方法はありますが、それでも短くてもパスフレーズを設定する方が安全です。
解決:パスフレーズを設定しました。
Gitでの署名
コミットする際は、GitHubに登録したGPG公開鍵と紐づいた秘密鍵で署名する必要があります。
その後、GitHubは署名されたコミットがプッシュされるとコミット作成者を検証します。
GitHubのコミットに「Verified」バッジも一緒に表示されます。
GitでGPG署名の準備
以下のA、B、Cの方式から一つを選択します。
オプション A) 手動署名(コミットごとに -S)
自動設定なしで、署名したいコミットにだけ -S を付けます。
1git commit -S -m "Commit message"
オプション B) グローバル自動署名(すべてのリポジトリ)
ローカル環境で作るすべてのリポジトリに自動署名を有効にします。
1# GPGキーIDを登録(グローバル)
2git config --global user.signingkey 7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX6
3
4# コミット自動署名(グローバル)
5git config --global commit.gpgsign true
6
7# 設定確認
8git config --show-origin commit.gpgsign
オプション C) リポジトリ単位の自動署名(特定のリポジトリのみ)
特定のリポジトリでのみ自動署名を有効にします。
--globalはすべてのリポジトリに適用します。--localは現在のリポジトリにのみ適用します。設定は.git/configに保存されます。
1# リポジトリに移動
2cd /path/to/repo
3
4# GPGキーIDを登録(ローカル)
5git config --local user.signingkey 7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX6
6
7# コミット自動署名(ローカル)
8git config --local commit.gpgsign true
9
10# 設定確認
11git config --show-origin commit.gpgsign
GPGで署名されたコミットの作成
コミット時に -S オプションを使用して署名を追加します。
1# 署名されたコミットを作成
2git commit -S -m "コミットメッセージ"
3
4# 自動署名が設定されている場合
5git commit -m "コミットメッセージ"
署名確認:コミットが正しく署名されているか確認します。
1# コミット署名の確認
2git log --show-signature
3
4# または
5git verify-commit HEAD
(参考)トラブルシューティング
error: gpg failed to sign the data
署名の問題でコミットが失敗しました。
1**error: gpg failed to sign the data:**
2[GNUPG:] KEY_CONSIDERED 7E7DCEBF62463A41ACD992D8D9F62FE2379DF7E6 2
3[GNUPG:] BEGIN_SIGNING H8
4[GNUPG:] PINENTRY_LAUNCHED 42114 curses 1.3.2 - xterm-256color NONE - 501/20 0
5gpg: signing failed: Inappropriate ioctl for device
6[GNUPG:] FAILURE sign 83918950
7gpg: signing failed: Inappropriate ioctl for device
8**fatal: failed to write commit object**
原因: GPGキーにパスフレーズが設定されている状態で発生することがあります。
解決: OSと環境によって対処方法が異なります。Mac環境ではpinentry-macをインストールして解決しました。
- パッケージのインストール
brew install pinentry-mac- ~/.gnupg/gpg-agent.conf に以下の内容を追加します。
pinentry-program /opt/homebrew/bin/pinentry-mac- ~/.profile に以下の内容を追加します。
export GPG_TTY=$(tty)- プロファイルを再読み込みします。
source ~/.profile- gpg agentを再起動
gpgconf --kill gpg-agentgpgconf --launch gpg-agent- 再度コミット:パスフレーズ入力ウィンドウが表示されます
GitHubでの署名
GitHubとGPG
GitHubにGPG公開鍵を登録することで、コミット署名を検証できます。
GitHubはプッシュされたコミットの署名を確認する際、登録されたGPG公開鍵を使って署名が有効かどうかを検証します。
検証が成功するとコミットの横に「Verified」バッジが表示され、そのコミットが登録されたキーの所有者によって作成されたことを証明します。
これにより以下のメリットが得られます:
- 身元確認: コミット作成者が実際に本人であることを証明します。
- 改ざん防止: 他人が自分の名前でコミットを作成することを防ぎます。
- 信頼性向上: オープンソースプロジェクトやチーム協業でコードの出所を明確にします。
登録手順
GPG公開鍵をGitHubの個人設定の GPG keys セクションに登録します。
- GitHubにログインし、右上のプロフィールアイコンをクリックします。
- Settingsを選択します。
- 左サイドバーで SSH and GPG keys をクリックします。
- GPG keys セクションで New GPG key ボタンをクリックします。
- 公開鍵の全内容をコピーして入力欄に貼り付けます。
- Add GPG key ボタンをクリックして登録を完了します。
登録が完了するとGPG Keysのリストに新しいキーが表示されます。
個人のGPG公開鍵の照会
1gpg --list-secret-keys --keyid-format LONG
結果
[keyboxd]
—-
pub rsa4096 2026-02-16 [SC] [expires: 2027-02-16] 7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX6 ← {Key ID} uid [ultimate] Son Won Chul (plzhans’s macbook) [email protected] sub rsa4096 2026-02-16 [E] [expires: 2027-02-16] ← キーの有効期限
キーの内容を確認します。
1# キーの閲覧: gpg --armor --export {Key ID}
2gpg --armor --export 7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX6
GitHub GPGキーの登録


リポジトリへのプッシュ
署名されたコミットをGitHubにプッシュすると「Verified」バッジが表示されます。
1git push origin main
署名されたコミットとタグの確認

