YubiKeyのセットアップ on ArchLinux

完全にメモなので全く纏まっていないです。

インストール

GUI でポチポチやりたかったので yubikey-manager-qt をインストール。 コマンドでやりたい場合は yubikey-manager を入れればいいが、なんとなくこっちの情報は少ないような気がしている。

SSH で使いたい場合は opensc パッケージもインストールする。

pcscd.socket の有効化

これを有効化しないと “Failed connecting to YubiKey” と言われてしまう。

$ sudo systemctl enable --now pcscd.socket

適当にこのエラーメッセージで調べても書いていないことが多くて、ちょっと手間取ったけど、 CLI の方で出てきたエラーで検索したらこれが出てきて、解消した。

PIN を設定したり…

yubikey-manager の Applications から PIV を選ぶと PIN の設定をしたり Certificate を追加したりするオプションが出てくる。

SSH で使う

ecdsa-sked25519-sk といったタイプの鍵を生成して使用する方法と、PIV の機能を使用して OpenSC 経由で使用する方法の 2 通りがある。

-sk がついた鍵を生成する方法は、YubiKey をさして ssh-keygen するだけなので簡単に使用できるが、 SSH クライアントのサポートに加えてサーバ側のサポートも必要というデメリットがある。 あと、複数の YubiKey を持っている場合、それぞれの YubiKey 用に秘密鍵を使い分けないといけないはず。

PIV を使用する方法では、サーバ側から見ると普通の鍵に見えるが、RSA と ECC (ECDSA) しか選べないというデメリットがありそう。 RSA なのもどうなのって感じだし、ECDSA はちょっとアレらしい 1 のでかなり微妙な選択肢ではある。

といっても暗号にはあんまり詳しくないのでおかしなことを言っているという説はある。

どっちを選ぶべきなのか良く分からないが、直感的には -sk の鍵を使う方が盗まれにくそうな感じはする。 YubiKey と秘密鍵のファイルの両方が必要になるので。 ……とか言いつつ周辺の状況と相談しつつ PIV を使う方法を選んでおいた。

まずは、YubiKey Manager で Certificates のところで Authentication のスロットに鍵を保存する。今回は ECCP384 というやつを選んだ。 楕円曲線暗号らしいので雰囲気で RSA よりいいかなということで選んだだけなので、これがいい選択だったのかは分からん。 まあ必要ならすぐに生成し直せるので。

SSH の公開鍵は

$ ssh-keygen -D opensc-pkcs11.so

で得られるので、これを認証したいサーバに登録する。

接続するときは、

$ ssh -I opensc-pkcs11.so ホスト名

.ssh/config に書いておくと毎回指定しなくていい

Host *
    PKCS11Provider opensc-pkcs11.so

毎回 PIN を入れるのが少し面倒臭いが、コマンドだったらもう少し柔軟に指定できるらしい。 でもまあとりあえず僕は毎回 PIN を入れることにした(鍵を登録し直すのが面倒だと思ったのでそもそも試してない)。

とりあえずおわりに

この記事を GitHub に push するときに YubiKey に入っている鍵を使うつもりなので、 これが公開されているということは使えたということですはい。