ことの発端
ここ数年で「パスワードのみの認証」は無くなり、2要素認証、多要素認証が主流になることは間違いないです。
そんな中、 USB デバイスを使用した認証モジュールが出現してきて、中でも Yubico 社の YubiKey は有名だったりします。
一般的には FIDO2(WebAuthn) で、この YubiKey を認証方法として登録したりするのですが、今回は GitHub や BitBucket などの ssh の公開鍵認証方式で YubiKey を使うことになりました。
なお、 公開鍵認証方式で YubiKey を使用するためには YubiKey シーリーズの中でも YubiKey 5 シリーズ のように、PIV (Personal Identification Verification)という ICカード 機能を搭載しているものを使用する必要があります。
この記事では YubiKey 5 シリーズ の設定を行い、公開鍵を取得するまでをまとめています。
取得した公開鍵を使って、 GitHub を使用する手順については別の記事とさせていただきます。
作業の流れ
一度、流れが分かれば、そんなに手数が多いわけではないので、簡単だと思いますが、画面キャプチャが多くて見通しが悪いので、やることを下記にまとめます。
1. インストールと起動
2. PIN を設定
3. PUK を設定
4. Managemenet Key を設定
5. 証明書を登録
6. 公開鍵を取得
1. インストールと起動
YubiKey の各種設定は YubiKey Manager を使用すると簡単です。
-
下記 URL より
YubiKey Managerをインストールします。
https://www.yubico.com/support/download/yubikey-manager/
2. PIN を設定
YubiKey の PIN を指定します。
この PIN は PIV のみならず FIDO2 などでも使用します。
-
Current PIN(初回設定時 1 はUser defaultにチェックを入れます)、New PIN、Confirm new PINを入力してChange PINをクリックします。

3. PUK を設定
PUK は PINロック解除キー(PIN Unlock Key) と呼ばれるもので、 PIN を3回連続失敗してロックした YubiKey を復旧するための文字列を設定します。
-
Current PUK(初回設定時 2 はUser defaultにチェックを入れます)、New PUK、Confirm new PUKを入力してChange PUKをクリックします。

4. Managemenet Key を設定
個人で使用する分には、この設定は行わずにデフォルトを使用した方が無難です。「何となく設定したい」レベルなら設定しないことをオススメします。
Managemenet Key を変更した後、この Managemenet Key を忘れたなんて事になると、もう証明書の追加・変更・削除ができなくなります。 3
設定するケースとしては、企業内のセキュリティ担当者が証明書を登録し、むやみに証明書を変更したり削除したりしないようにする場合です。
(仮に紛失や盗難に遭ったとしても、最終的には PIN で保護されます)
ウチの会社みたいに YubiKey を社員に配布して、「勝手に設定して使ってね」というケースでは、デフォルトのままで使うことをルールとしています。
-
Current Management Key(初回設定時 4 はUser defaultにチェックを入れます)、GenerateをクリックしたらNew Management Keyをメモしておきましょう。 その後、Protect with PINにチェックを入れてFinishをクリックします。

5. 証明書を登録
YubiKey には証明書を4つ保存することができますが、今回は Authentication(Slot 9a) に証明書を登録します。
ちなみに、他のスロットでも問題ないのですが、 Authentication(Slot 9a) と Key Management(Slot 9d) は1回 PIN 入力を実施すると YubiKey を抜去(切断)するまで使用できます。
-
AlgorithmはRSA2048を選択して 5 、Nextをクリックします。

-
Subjectに 適当な名前を入力して、Nextをクリックします。(Subjectの文字列中に、このスロットの用途やスロット名Authentication (Slot 9a)などを示した方が、後々の選択画面で迷わないのでオススメします。)

-
Management key入力してOKをクリックします。(出荷時から変更していなければUser defaultにチェックを入れます)

6. 公開鍵を取得
一度、 YubiKey に入れた秘密鍵は二度と外に出すことはできません。秘密鍵を用いた暗号化・複合化は YubiKey 内部で実行されるため、秘密鍵が外に出ることがなく、これにより安全性を担保しています。
従って、この節でのエクスポートは公開鍵のエクスポートになります。
エクスポートした公開鍵を、各種サービスに登録することで認証サービスを使用できるようになります。
-
エクスポートされるファイルは CRT形式なので、必要に応じて下記コマンドにて ssh の公開鍵に変換します。(例として、エクスポート時のファイル名称を
yubikey_9a.crtとし、yubikey_9a.pubが変換後のファイルになります。)
openssl x509 -in yubikey_9a.crt -pubkey -noout > yubikey_9a.pub.tmp
ssh-keygen -f yubikey_9a.pub.tmp -i -m PKCS8 > yubikey_9a.pub














