Git で GPG を使ってコミットにサインしてみよう
GPG とは
暗号化ソフト
GnuPG WikiPedia
嬉しいこと
- 署名すると特定の人が作成したことを示せる
- 暗号化すると特定の人しか解読できないファイルが作成できる
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
感想
やー、去年からの宿題を提出した感じです。