読者です 読者をやめる 読者になる 読者になる

#chiroito ’s blog

Java を中心とした趣味の技術について

Github で楕円曲線暗号の GPG Key を使う

概要

Github ではデジタル署名したコミットに対して [Verified] というものが表示されるようになっています。デジタル署名をする事で人を証明し、内容が改ざんされていないことを保証するものなので、できるだけ導入しましょう。 f:id:chiroito:20161125232043p:plain

十分親切なマニュアルが Github から公開されていますが(https://help.github.com/categories/gpg/)、英語しかないようですし、日本語の情報は RSA を使ったサンプルばっかりだったので、521bit の楕円曲線暗号を使用した方法をまとめておきます。521bit の楕円曲線暗号は 15,360 bit の RSA と同等と言われています。

  1. 楕円曲線暗号(ECC)の GPG キーを作成

  2. Github へ GPG キーを登録

  3. git コマンドで GPG キーを使うように設定

環境

GnuPG楕円曲線暗号を使えるのは 2.1 以降とのことなので、今回は modern を使用しています。stable は 2.0.xです。

1. 楕円曲線暗号(ECC)のGPGキーを作成

Github の ID と Email で GPG のキーを作ります。作成方法はこちらをご参照下さい。

chiroito.hatenablog.jp

作成した 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 キーをペーストします。

f:id:chiroito:20161125222618p:plain

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 になるんだろうと思っていくつか試してみました。 f:id:chiroito:20161125232059p:plain

Github に登録した GPG キーを消すと Unverified になります。もう一度同じ GPG キーを登録すると Verified に戻りました。

GPG キーの本名とメールが Github のアカウント名と登録しているメールアドレスの両方と一致同一でないと Unverified になります。ちゃんと登録してるのに Unverified になる場合は gpg --list-secret-keys --keyid-format LONG の出力結果に出る本名とメールアドレスが正しいか確認しましょう。