Qadiff’s diary

合同会社カディフは多くの人にとって "試験的" か、"実践的" なサービスを提供します。

合同会社カディフが運営するサービスや技術情報、さらにはおもしろかったものについてお届けします。

合同会社カディフ公式サイトはこちら

Git で GPG を使ってコミットにサインしてみよう

GPG とは

暗号化ソフト
GnuPG WikiPedia

嬉しいこと

  1. 署名すると特定の人が作成したことを示せる
  2. 暗号化すると特定の人しか解読できないファイルが作成できる

GitHub で求められているのは上の項目

なぜ特定の人が作成したことを示せると嬉しいの?

Git の特性として「名前とEmail アドレスを好きに設定できる」というのがある。 そのため本人確認が性善説によっている。だから、本人確認ができていないといえばできていない。

GitHub などに Push できないから大丈夫ではないか?と考えるかもしれない。
例えば悪意あるユーザーを X さんとする。 あなたになりすまして "悪意のあるコード" があるコミットを作成し、X のブランチに変更を取り込む。 そして、X は "悪意のあるコード" を Push する。 もしコミットに GPG を設定していない場合、このコードがあなたの書いたコードではないと証明することはできない。 めでたくあなたはプロジェクトから追放される。

GPG を使うと、コミットに本人が作成したことのサインを設定できるので、本人確認の問題をクリアできます。

GPG の設定

インストールの確認

gpg --version

Mac でのインストール

brew install gpg pinentry-mac

Mac 用の設定を行う

touch ~/.gnupg/gpg-agent.conf
echo "pinentry-program /usr/local/bin/pinentry-mac" >> ~/.gnupg/gpg-agent.conf
killall gpg-agent

GPG の鍵の生成

ここを読んで生成すればよい

# あんちょこ
gpg --full-generate-key
gpg --list-secret-keys --keyid-format LONG
gpg --armor --export <keyid>

Github に GPG の鍵を設定

https://github.com/settings/keys

ローカルの Git への設定

git config --global gpg.program gpg
git config --global user.signingkey <keyid>
# 全てのコミットで GPG を有効化する
git config --global commit.gpgsign true
# 署名付きコミットコマンド(.gitconfig に設定したほうがよい)
# git commit -S 

感想

やー、去年からの宿題を提出した感じです。

合同会社カディフは多くの人にとって "試験的" か、"実践的" なサービスを提供します。

合同会社カディフ公式サイトはこちら