search
LoginSignup
6
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Organization

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

個人的な興味で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すれば完了です。
(別件が入りばたついてきたので、ご不明な点があればコメントください)

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
What you can do with signing up
6
Help us understand the problem. What are the problem?