7
6

More than 5 years have passed since last update.

Yubikeyを使って、Githubのcommitをverifyする

Last updated at Posted at 2018-02-13

個人的な興味でGithubや色んな証明周りを、ぼくである、と証明するために、Yubikeyを使い始めました。

現状認証や証明させているものの一覧は以下のような感じです。

  • 認証
    • mac
    • github
    • facebook
    • dropbox
    • kraken
    • SSH(さくらインターネット, AWS)ログイン
  • 証明
    • github(GnuPG(commit verify)) ← 今回はこれ
    • メール(S/MIME(IdenTrust)及びGnuPG(暗号メール))
    • Keybase(GnuPGをアップロードできる)
    • Facebook(GnuPGをアップロードするページが用意されている)
  • 署名(暗号化含む)
    • Atom(atom-gpg pluginをインストール)
    • iCloudの一部重要なメモ類(GnuPGで暗号化)

若干ありきたりではありますけども、証明できるもの、認証できるもの、署名できるものは全てYubikeyに依存し始めました。

iCloudのメモをYubikey+GnuPGで暗号化しておくのはなかなかイケてるな、と思ってます。
説明はこの辺を参考にどうぞ

Using GPG and SSH keys (GnuPG 2.1) with a Smartcard (Yubikey 4)
PGP 鍵を用いたファイルの暗号化

ちなみに、ぼくのカード情報は…と思ったけど、出力したら色々個人情報露出することになるやないかーい!

今回やろうと思っていること

GithubをMacとYubikeyを使い、commit時にverifyをつける

どういうことかというと、詳細は以下を参照ください。

verify.png

Verifiedがついててかっこいい!
ぼくがcommitしたんだよ!ってことを証明しています。

なぜYubikeyが必要なのか?

Yubikey一つあれば署名も証明も暗号化も行えます。
Yubikeyがない人は単純にGPG Suiteをインストールし、GPG鍵(秘密鍵・公開鍵)を作成するだけでも証明できます。
でも、GPG Suiteだけだと弱いんです。
何が弱いって、証明する物理的なものがないから弱いんです。
GPG Suiteだけ使った場合、MacやWindows, Linuxが自分のものであれば、証明そのものは問題ありません
アカウントハックされた場合の方に問題があり、パスフレーズも漏れている場合、乗っ取られたマシンで簡単に証明や署名、復号化が出来てしまいます。

Yubikeyを使っている場合、そのYubikeyを物理的に差さないと署名や証明、復号化はできません。
外出時、離席時は抜くようにすれば、第三者が何かしようと思っても、あれ?あれ?となり、証明する手段がありませんので、物理的な機器があると強いんです。

GnuPGを使うための事前準備

ていうてもググったら出てくる情報をまとめているだけですが…。

brew install gnupg@2.0 pinentry pinentry-mac gpg-agent

GPG Suiteを入れておきます。

gpg --card-editコマンドなどの使い方は以下に説明があります(英語ですが
Using GPG and SSH keys (GnuPG 2.1) with a Smartcard (Yubikey 4)

あ、この記事に2つ目のアドレスを追加する方法が書かれてるからやってみよう…(今回の記事に関係ないけど気づいてしまった)

ともかく、記事通りにセットアップができれば、あとは、以下の要領でconfig周りに手を入れていきます。

vim ~/.gnupg/gpg.conf

use-agent

batch <- これも使っちゃダメでした。(2018/2/14)

vim ~/.gnupg/gpg-agent.conf
(macの場合はいらないことが判明しました。エラーが出るようならなくてOKです。)

use-standard-socket
pinentory-program /usr/local/bin/pinentory-mac

最後に.gitconfigもしくは.git/configのために以下のコマンドを叩きます。

user.signingkey XXXXXXXXXXXで鍵のsecretを指定するのですが、確認方法は、以下のコマンドで確認できます。

gpg --list-secret-keys --keyid-format LONG

出力結果の例

yxxxxx:~ y_xxxxx$ gpg --list-secret-keys --keyid-format LONG
/Users/y_xxxxx/.gnupg/pubring.kbx
-----------------------------------
sec>  rsa4096/XXXXXXXXXXXXXXXX 2018-01-27 [SC]
      58F7C266F3F62 ~ BAD8E247C4C
   カードシリアル番号 = 0001 01111110
uid                 [  究極  ] yyyy xxxxx (by comment) <y.xxxxx@example.com>
ssb>  rsa4096/YYYYYYYYYYYYYYYY 2018-01-27 [A]
ssb>  rsa4096/ZZZZZZZZZZZZZZZZ 2018-01-27 [E]

.gitconfigに書いてしまって良い場合は以下のような感じです。

git config --global user.name "xxxx yyyyy"
git config --global user.email "y.xxxx@example.com"
git config --global gpg.program $(which gpg)
git config --global user.signingkey XXXXXXXXXXXXXXXX
git config --global commit.gpgsign true

個別に指定する場合は、git cloneした中にある.git/configにコマンドを実行します。

git config --local user.name "xxxx yyyyy"
git config --local user.email "y.xxxx@example.com"
git config --local gpg.program $(which gpg)
git config --local user.signingkey XXXXXXXXXXXXXXXX
git config --local commit.gpgsign true

これでgit commitとgit pushすれば完了です。
(別件が入りばたついてきたので、ご不明な点があればコメントください)

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6