Yubikey 5Ciを買って、改めてYubikeyを設定してみた

# Yubikey 5Ciが発売し、一ヶ月近くが経ったはず。

こんにちは。カシマです。
Yubikey 5Ciを買って、おそらく一ヶ月近くが経ちました。
Yubikey 4からはおそらく1年近く経ったと思います。

Yubikey 5CiはiPhoneにも対応するようLightningポートとUSB Type-Cの両方が付いています。
しばらく使ってやっと本来の使い方がわかってきましたので、設定方法などを記載します。

## Yubikeyの使い方

[Yubikeyにはいくつか使い方がある](https://qiita.com/akashima/items/0725a5f6bacfac6b910f)、というのは前回の記事通りです。
この辺、全部は網羅できておらず、何に使えるのかが曖昧だった気がしましたので改めてまとめ直します。

- U2F
- SSH
- S/MIME
- GPGの暗号化と復号
    - gitのcommit時にverifyする
- PINによるPCへのログイン
- 出力文字の設定（２パターン）

と、Yubikey Cloudとか併用するとできることがもうちょっと増えますが、Yubikey本体の使い方は大体こんな感じかと思います。

## Yubikeyのセットアップ

今まで使っていたYubikey Managerは証明書の期限などを自由に設定できましたが、どうやら新しいバージョンでちゃんとセットアップした方が綺麗に設定できました。

それぞれの画面はこんな感じになっており、UIが割とわかりやすくなりました。

### トップ画面

シリアル番号は見せないようご注意ください。
本家のサイトにトラブルで伝える時、シリアル番号を聞かれるのですが、これが漏れていると不正利用のケースも出てくる可能性が考えられます。

![yubikey-manager-top.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13837/31168dd5-71bf-f25a-badb-d25aed05d093.png)

### PIVの設定画面

ここも見慣れた画面だと思います。

![PIV.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13837/8ceb26d6-3521-2472-c599-568d04928c3d.png)

#### Setup for macOSで初期化する

Setup for macOSを押すとYubikeyの機能のいくつかが初期化されます。

- 証明書
- PIN/PUK
- OTP

GPGは初期化されません。

![3. Setup.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13837/e04577a9-c70e-4d1d-a53b-e9c67ccbb5cb.png)

#### Certificates - Authentication

Authentication用の証明書が勝手に生成されてセットアップされます。

![4. Certificates.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13837/10134a9f-6230-d7cb-4362-373f6546f7f6.png)

#### Certificates - Key management

Key Management用の証明書も勝手に生成されてセットアップされます。
この二つの証明書によって、PINやらの担保がされるようですので、Resetしないよう注意が必要です。

![5. Certificates.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13837/67c4d108-28da-1159-d0cb-652c8d5d4e9b.png)

### PINsの設定

PINのみ設定します。(PUKは設定できません）
PCログインするときのPinを設定します。

![6. PINs.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13837/700ccb19-ac0e-5025-b88d-cf53250debb9.png)

### OTP

Yubikey ManagerのOTPのセットアップはなぜかYubico Cloudとの連携に失敗しますので、別のYubikey Personalization Toolを使用します。
一応画像のみそれぞれを貼り付けておきます。

OTPのslot設定はこんな感じです。

![7. OTP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13837/ddc14a6c-0f13-893b-9560-37aafafc3824.png)

Yubico OTPとして設定する場合は以下のような感じになります。

![8. Yubico OTP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13837/fd4fa3d1-791c-4e43-5229-129ab6c5341f.png)

設定は基本Use serialとgenerateでOKです。

![9. Yubico OTP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13837/3f3b56ce-7449-4286-e982-506d8844c2e6.png)

Yubikey Personalization ToolからOTPは設定した方が良いです。
デフォルトのままWrite Configrationし、その後、UploadすることでYubikey Cloudに必要な情報を入力した状態でブラウザが開き、あとはOTPをクリアするだけです。
そのあとに発行されるAPIキーは自分で構築したサーバでYubikey Cloudを使うことがあれば、設定するので残しておきましょう。
最後にYubico Cloudにアップした情報が正常に検証できるか確認し、successになれば完了です。

![10. Yubikey Personalization Tool.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13837/3d37f029-4788-3c8c-a8a9-c69fcc9baeed.png)

### FIDO2

WebAuthnを使うときのPINだそうですが、まだ使ったことはありません（多分）

![10 FIDO2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13837/b1711620-dea9-3dff-bdca-10ab64299d08.png)

これでYubikey Manager側のセットアップは完了です。
諸々セットアップできたら一度、抜き差しし、証明書を認識させましょう。
PINを入力し、PCのロック解除ができればOKです。

ロック解除に3回失敗した場合は、PINのみリセットできるので、PINのみリセットして再度、PINをセットアップします。

## GnuPGの設定

ぼくはmacOSを利用しているため、brewで以下の通り、Yubikeyを使うために必要なモジュールをインストールします。

```shell
brew install gnupg gnupg@1.4 libgcrypt libusb libssh2 libusb-compat libgpg-error opensc openssh openssl@1.1 pinentry pinentry-mac pkcs11-helper
```

gnupgコマンドでカード情報を書き込むのですが、コマンドは前回と変わらないため[過去記事](https://qiita.com/akashima/items/4b40ccb13ad13dee5cdb)を参照します。

## SSHできるようにするために

SSHに使う秘密鍵・公開鍵ですが、秘密鍵はYubikeyの内部に保存されます。
公開鍵の取り出し方ですが、本当に色々やり方があって苦戦しました。

コマンドは以下のコマンドで取り出せます。

```shell
pkcs15-tool --read-ssh-key 1
Using reader with a card: Yubico Yubikey 4 OTP+U2F+CCID
ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmmsdSRFGjfsudaGASDLYwN/QImmVQ0PzJKcx0lmMGsisdjfsmaGasdu03134+kZdsJUmA6Q9Rd9IY6kQxj87KQO5208D5g4Y= PIV AUTH pubkey
```

取り出した公開鍵のうち、rsaやecdsaなどが書かれた2行目をコピーし、接続したい環境のauthorized_keysとして設定できれば繋げられるようになります。
ぼくはこれでだいぶ頭を抱えたんですけど、なぜかgithubにgit pushや自分用のサーバにSSHできず、なんでや…となってました。（2週間以上悩まされて、gitにはcommitできず、自分のサーバにも入れず悲しい状態が続いた）

# まとめ

S/MIMEとかは個人購入してセットアップしましたので割愛。
U2Fもこれで使える状態です。
GPGの暗号化・復号も前回記事参照で使える状態になります。
PINと出力文字の設定は当記事で使えるようになります。

ただここまでの流れを見ていただいてわかる通り、一般の人が使うには機能が豊富すぎる…！
一般の人が使うにはGoogleから出てるTitanの方が使い勝手はいいんじゃないかな、と考えています。(Titanは本当にU2Fとしてしか機能しない）

でも、使いこなせるとすごい楽しいですし、自己のアカウント管理やgpgなど活用できる場面が豊富なので良い製品だなーと思います。

**あとはAppleのSafari、お前がU2Fに対応すりゃ良いんだよ。いつ対応するんだ。FirefoxもChromeも使える状況だぞ！**