概要
Github ではデジタル署名したコミットに対して [Verified] というものが表示されるようになっています。デジタル署名をする事で人を証明し、内容が改ざんされていないことを保証するものなので、できるだけ導入しましょう。
十分親切なマニュアルが Github から公開されていますが(https://help.github.com/categories/gpg/)、英語しかないようですし、日本語の情報は RSA を使ったサンプルばっかりだったので、521bit の楕円曲線暗号を使用した方法をまとめておきます。521bit の楕円曲線暗号は 15,360 bit の RSA と同等と言われています。
環境
Windows 8.1 Pro
GnuPG modern 2.1.16
GnuPG が楕円曲線暗号を使えるのは 2.1 以降とのことなので、今回は modern を使用しています。stable は 2.0.xです。
1. 楕円曲線暗号(ECC)のGPGキーを作成
Github の ID と Email で GPG のキーを作ります。作成方法はこちらをご参照下さい。
作成した GPG キーの ID を確認します。ID は sec の右側にあるnistp521/
移行の空白までの文字列です。今回の例では GPG キーの ID はC450FBAF723F1D25
になります。
gpg --list-secret-keys --keyid-format LONG
gpg: 信用データベースの検査 gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: 深さ: 0 有効性: 1 署名: 0 信用: 0-, 0q, 0n, 0m, 0f, 1u C:/Users/chito/AppData/Roaming/gnupg/pubring.kbx ------------------------------------------------ sec nistp521/C450FBAF723F1D25 2016-11-25 [SC] 6DF4C433A441A4AFE10DE884C450FBAF723F1D25 uid [ 究極 ] GithubId <Githubメール> ssb nistp521/3FD75CD4EA94BB66 2016-11-25 [E]
2. Github へ GPG キーを登録
先ほど調べた GPG キーの ID を使用してgpg --armor --export
コマンドで GPG キーを出力します。この出力結果を Github の設定ページへコピペして GPG キーを登録します。
コマンドの引数に GPG キーの ID を与えて GPG キーを出力します。
gpg --armor --export C450FBAF723F1D25
-----BEGIN PGP PUBLIC KEY BLOCK----- (ここに文字がいっぱい表示されます) -----END PGP PUBLIC KEY BLOCK-----
-----BEGIN PGP PUBLIC KEY BLOCK-----
と-----END PGP PUBLIC KEY BLOCK-----
も含めて出力結果を全てコピーします。
次に、Github の設定ページに GPG キーを登録します。
[Personal settings] の [SSH and GPG keys] 画面で設定します。(https://github.com/settings/keys) [New GPG Key] というボタンを押すと Key を入力するテキストエリアが表示されますので、先ほどコピーした GPG キーをペーストします。
3. git コマンドで GPG を使うように設定
git で GPG を常に有効化し、git で使用する GPG のプログラムと使用する GPG キーのIDを指定します。今回の例にはグローバルレベルで設定しています。
git で GPG を常に有効化します。
git config --global commit.gpgsign true
git で使用する GPG のプログラムを指定します。
git config --global gpg.program "c:\Program Files (x86)\GnuPG\bin\gpg"
git で使用する GPG キーのIDを指定します。
git config --global user.signingkey C450FBAF723F1D25
注意点
Verified があるなら、どうやったら Unverified になるんだろうと思っていくつか試してみました。
Github に登録した GPG キーを消すと Unverified になります。もう一度同じ GPG キーを登録すると Verified に戻りました。
GPG キーの本名とメールが Github のアカウント名と登録しているメールアドレスの両方と一致同一でないと Unverified になります。ちゃんと登録してるのに Unverified になる場合は gpg --list-secret-keys --keyid-format LONG
の出力結果に出る本名とメールアドレスが正しいか確認しましょう。