個人的な興味でGithubや色んな証明周りを、ぼくである、と証明するために、Yubikeyを使い始めました。
現状認証や証明させているものの一覧は以下のような感じです。
- 認証
- mac
- github
- 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をつける
どういうことかというと、詳細は以下を参照ください。
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すれば完了です。
(別件が入りばたついてきたので、ご不明な点があればコメントください)