GitHub署名付きコミット
GPGキーを使用してGitHubコミットに署名し、Verifiedタグを取得する方法
AI生成コンテンツは不正確または誤解を招く可能性があります。
GitHub Web UIでのみ表示されるVerifiedタグ
GitHubにいつの間にか、自分のニックネームでリポジトリを作成してreadme.mdファイルを作成すると、GitHubプロフィールに表示される機能が追加されました。

該当リポジトリにはreadme.mdファイルしか存在しないため、GitHub Web UIで編集することがほとんどです。
このような方法で編集した後、コミットログを見ると以下のようになります。

これまでノートPCで作業してアップロードしていたコミットには無かったVerifiedタグが付いているのが確認できます。
可能であればローカルでのコミットにも該当タグが欲しかったので、調べてみると十分な理由があったため、今回の投稿で紹介することにしました。
GPG(GNU Privacy Guard)
PGPというメール用暗号化ツールをベースに作られたプログラムです。 基本的にRSAを使用し、DSA and Elgamal、DSAなどもサポートしています。
GitHubでVerifiedタグが存在する理由
ノートPCやパソコンを新しく購入した後、開発のためにgit設定を行うとしましょう。 おそらく必ず以下のコマンドを入力することになるでしょう。
git config --global user.name
git config --global user.emailGitHubはこの情報を参照して、誰が該当コミットを行ったかを表示します。 少し考えてみると不思議な点に気づきます。nameとemailは入力した通りに保存されるということです。 いくらでも操作可能で、emailを間違って入力した経験がありますが、該当コミットをGitHubにpushしても大きな問題は発生しなかったようです。
このときVerifiedタグの存在理由が生まれます。
GPGを使って生成したキーをGitHubに共有し、そのキーを使ってコミットにデジタル署名をした後、該当コミットをPushすると、共有したキーでGitHubがそのコミットが私が行ったものであることを認証し、Verifiedタグを付けてくれます。
まとめると、私がやったと書いてあっても本当に私がやったかどうか分からないので、電子署名をして認証されたコミットを行うということです。 また、Web UIで作成したコミットにVerifiedタグが付いた理由は、GitHubが自動的に署名するからです。
ローカルコミットに署名する方法
以下の手順はWSL2でGPGキーを生成してコミットを作成する場合を基準に作成されました。 MacまたはWindowsの場合は少し検索すれば進めることができるので、調べてみてください。
GPGキーの生成
GPGキーを作成するには、Windows - Gpg4win、macOS - Mac GPG、Linux - GnuPGを使用します。
macOSはbrew install gnupg、Debian系列はデフォルトでインストールされていますが、無い場合はapt install gnupg、他のディストリビューションは適宜対応してください。
以下のコマンドでGPGキーを生成します。
gpg --full-generate-keyいくつかの選択肢が表示されますが、最初に生成するキーの種類を選択する質問が出ます。
RSAがデフォルトなので、エンターを押すとRSA and RSAキーが生成されます。
次にキーサイズを入力するよう求められますが、最小条件が4096とのことなので4096を入力しましょう。
その次は有効期限を選択する必要がありますが、デフォルト値は無制限です。
Is this correct? (y/N)という質問が出たらyを入力しましょう。
Real Name:にはGitHubのニックネームを入力し、
Email address:にはGitHubアカウントに登録して認証されたメールアドレスを入力しましょう。
最後にComment:に今作成したキーについての説明を書きますが、「For Github Signed commit」程度で良いでしょう。
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?という質問が出たら、間違って入力した内容がない場合はOを入力してキー生成を完了しましょう!
gpg --list-secret-keys --keyid-format=longコマンドまたは
gpg -k --keyid-format=longコマンドで生成したキーを確認できます。
以下の例は次のようにキーが生成された場合を例として作成されました。
/home/minpeter/.gnupg/pubring.kbx
---------------------------------
pub rsa4096/2167399770AVC2F3 2022-10-11 [SC]
2E992F8F8D1944D661F7FA652167399770AVC2F3
uid [ultimate] minpeter2 (for github signed Commit) <kali2005611@gmail.com>
sub rsa4096/ADE4A2BCCAEA3G37 2022-10-11 [E]生成したGPGキーをGitHubに登録する
以下のコマンドで公開鍵をASCII形式で出力できます。
gpg --armor --export 2167399770AVC2F3出力結果全体、つまり-----BEGIN PGP PUBLIC KEY BLOCK-----から-----END PGP PUBLIC KEY BLOCK-----までをコピーします。
次にGitHubにアクセスして、Settings > SSH and GPG keysで
GPG keys領域の緑色のNew GPG keyボタンをクリックしましょう。
TitleにはKeyについての説明などを書けば良いと思います。私の場合は
ノートPC名 wsl2 signed commitとしました。
後で自分だけ分かれば良いのでは...?
そしてKey部分に先ほどコピーした公開鍵を貼り付ければ完了です。
git config
設定がほぼ完了しました。 署名付きコミットを行うノートPCで以下のコマンドを使ってキーを登録しましょう。
git config --global user.signingkey 2167399770AVC2F3Linuxの場合は以下のコマンドを実行しましょう。
zsh
[ -f ~/.zshenv ] && echo '\n## GIT gpg configure\n\nexport GPG_TTY=$(tty)' >> ~/.zshenvbash
[ -f ~/.bashrc ] && echo '\n## GIT gpg configure\n\nexport GPG_TTY=$(tty)' >> ~/.bashrcこれですべての設定が完了し、git commitコマンドを実行する際に-Sオプションを付けるだけです。
もしすべてのコミットに署名したい場合は、以下のコマンドで有効化できます。
git config --global commit.gpgsign trueこれでコミットしてみると、コミットにVerifiedタグが付いているのが確認できます。
