Git Commit で OpenPGP 署名を行う

(move from http://text.baldanders.info/remark/2016/04/git-commit-with-openpgp-signature/)

Git で commit する際に OpenPGP 署名を付加できるらしい。 いやぁ,今まで知らなかったよ。 物知らずでごめん。

OpenPGP 鍵の登録

Git に OpenPGP 鍵を設定するには以下のコマンドでいいようだ。

$ git config --global user.signingkey 7E20B81C

7E20B81C” は OpenPGP 鍵の鍵 ID である。 鍵ごとに異なる値になるので注意。 今回は「OpenPGP 公開鍵リスト」で公開している鍵の鍵 ID を登録している。 この設定で .gitconfig ファイルに以下の記述が追加される。

[user]
    signingkey = 7E20B81C

Gpg を直接指定する場合

Git for Windows の場合, git bash に同梱されている gpg.exe を使うのだが,困ったことにこれが classic version なのである。

$ gpg --version
gpg (GnuPG) 1.4.20
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: ********
Supported algorithms:
Pubkey: RSA, RSA-E, RSA-S, ELG-E, DSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2

既に GnuPG の Windows 版をインストールしているのであれば,以下の設定で gpg.exe をフルパス指定できる。

$ git config --global gpg.program C:/path/to/GnuPG/bin/gpg.exe

ちなみに .gitconfig ファイルには以下の記述が追加される。

[gpg]
    program = C:/path/to/GnuPG/bin/gpg.exe

なお Windows 環境であれば,特に理由がないかぎり, stable/modern version を使うことをお薦めする。 Windows 環境以外でも GnuPG を classic version と stable/modern version で使い分けている場合は,この設定が役に立つだろう。

Commit に OpenPGP 署名を付加する

git commit 時に OpenPGP 署名を付加したい場合は, version 2 以降なら,以下の設定で常時署名を行うようになる。

$ git config --global commit.gpgsign true

.gitconfig ファイルには以下の記述が追加される。

[commit]
    gpgsign = true

この状態で逆に commit 時に署名を付加してほしくない場合は --no-gpg-sign オプションを付加すればいいようだ。

ちなみに ATOM エディタの git-plus パッケージで commit してみたが,きちんと署名もできていた。 Git Extensions でも問題ないようだ。 「GitHubでGPGにより署名されたコミットにバッジが表示されるようになったので設定してみる」には「GitHub DesktopはGPGによる署名をサポートしていません」とあるが, Facebook で教えてもらった話によれば, gpg-agent と Pinentry が正しく設定されていれば使えるそうだ。

きちんと署名されているか確認するには git log コマンドに --show-signature オプションを付けるとよい。

Tag にも Merge にも署名できる

タグに署名を付加する場合は -s オプションを付けて

$ git tag -s -a v0.1.0

とすればいい。 同様に merge でも -S オプションを付けて

$ git merge -S branch

でいいようだ。

GitHub が OpenPGP 署名に対応した

GitHub で commit や tag に対する署名を表示できるようになったらしい。

たとえばこんな感じに表示される。

OpenPGP Key in GitHub (4)
OpenPGP Key in GitHub (4)

これを有効にするには GitHub に OpenPGP 公開鍵を登録して署名検証可能にしなければならない。 公開鍵の登録は設定画面で行う。

OpenPGP Key in GitHub (1)
OpenPGP Key in GitHub (1)

この画面で「New GPG key」ボタンを押すと以下の入力画面になる。

OpenPGP Key in GitHub (2)
OpenPGP Key in GitHub (2)

ここに公開鍵の armor テキストを貼り付けて「Add GPG key」ボタンを押せばよい。 これで OpenPGP 公開鍵の登録は完了である。

OpenPGP Key in GitHub (4)
OpenPGP Key in GitHub (4)

なお公開鍵の armor テキストは以下のコマンドで取得できる。

$ gpg --armor --export 7E20B81C

7E20B81C” は先ほど説明した鍵 ID である。

Tag や commit に署名することで「なりすまし」に対する抑止になる。 これは特にチームで開発を行う場合に威力を発揮するだろう。 ぜひ習慣付けていきたいものである。

ブックマーク