帰ってきた「しっぽのさきっちょ」

しっぽのさきっちょ: 2016-04-23 付 (2016-11-30 更新)

Git Commit で OpenPGP 署名を行う

no extension

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 環境以外でも GnuPG を classic version と stable/modern version で使い分けている場合は,この設定が役に立つだろう。

なお Windows 環境であれば,特に理由がないかぎり, modern version を使うことをお薦めする。 Windows 環境へ GnuPG を導入する方法については以下の拙文を参考にして欲しい。

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

ブックマーク

参考図書

photo
暗号技術入門 第3版 秘密の国のアリス
結城 浩
SBクリエイティブ 2015-08-25
評価

自作エミュレータで学ぶx86アーキテクチャ コンピュータが動く仕組みを徹底理解! 数学ガールの秘密ノート/丸い三角関数 数学ガールの秘密ノート/微分を追いかけて 情報セキュリティ白書2015: サイバーセキュリティ新時代:あらゆる変化へ柔軟な対応を 数学ガールの秘密ノート/数列の広場

SHA-3 や Bitcoin/Blockchain など新しい知見や技術要素を大幅追加。暗号技術を使うだけならこれ1冊でとりあえず無問題。

reviewed by Spiegel on 2015-09-20 (powered by G-Tools)