Yubikeyの使い方


# 今日初めて知った正しいYubikeyの使い方

今まで **yubico-piv-toolを使い、authenticationだけ入れればいいんだ！** と思っていました。

**大　間　違　い　で　し　た**

なぜ間違いだと気づけたかですが、同じマシン名で、同じユーザ名のマシンを二つ所有しており、その段階では問題なくPIVが使えていました。
しかし、別マシン名に試したところ、PIVが認識しないと言う事態に陥り、試しに **Setup for macOS** を押したことが起因しました。

![yubico-piv-tool.png](https://qiita-image-store.s3.amazonaws.com/0/13837/b2dcbb5b-194c-f4e9-e19c-ac8670b3b4b4.png "yubico-piv-tool.png")

Setup for macOSを押すと、初期化されると共に、登録した証明書が無くなり、Yubikey PIV Managerが生成した証明書を読み込むようになります。
またCLIで設定していたPUKやPINも消失します。

PIVに関わるAuthenticationとDigital Signatureが消失したことで、改めてインポートし直したAuthenticationでPINを入力しても **通らない** ことがわかりました。

やっちまったぜ！

で、改めて正しい使い方を知ろうとちょっと触り直しましたので、どう言う風な状態が正しいかをこちらに残しておきたいと思います。

## 正しい状態

この状態になれば、CLIから証明書を作成しようが、GUIから証明書を作成しようがどちらでも大丈夫です。

Authenticationの状態
![authentication.png](https://qiita-image-store.s3.amazonaws.com/0/13837/641e5fc9-1256-51ce-5055-b1c30756cdf8.png "authentication.png")

Key Managementの状態
![key_management.png](https://qiita-image-store.s3.amazonaws.com/0/13837/07bca736-dbb5-2758-34f2-beadfb9b0131.png "key_management.png")

少なくともこの2つの情報がどういう形であれimportもしくはgenerateできていればOKです。

一番手っ取り早いのは、冒頭の **Setup for macOS** を使う方が手っ取り早いです。
Setup for macOSを使わないのであれば、とりあえずGUIでPINだけ設定します。（CLIでPINを設定してもGUIでPIN設定してないよって言われて、設定する羽目になります。）
PUKは冒頭でも触れたとおり、設定しても無駄です。
PUKはPINを使うのであれば、以下の図の通り、blocked状態です。

![PIN.png](https://qiita-image-store.s3.amazonaws.com/0/13837/58dea3ad-7938-7f05-34e1-838c02aeeb20.png "PIN.png")

さらにPIN is management keyとも書かれていますが、こちら(Key Management)がPIN情報やパスワード情報を保持している証明書です。
なので、何度も書きますが、2つ必要です。
そして、見て分かる通り、PUKはグレーアウトされており設定できません。
設定する必要もありません。（デフォルトのままでOKですし、失敗すれば **yubico-piv-tool -a reset** すれば元に戻ります。）

もしぼくみたいに、有効期限を伸ばしたい場合は、Generate new keyしましょう。
期限を自由に設定できます。

## 誤った状態

CertificatesのAuthentication(9a)に証明書を取り込めばいいと思っている人が多数のようですが、これは誤りです。
正確に使いたい場合は、何度も書きますが、Key Management(9d)も生成が必要です。

CLIで実行するとこんな感じですね。

```
machine_name:~ fullname$ yubico-piv-tool -a status
CHUID:  123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789123456789
CCC:    987654321987654321987654321987654321987654321987654321987654321987654321987654321987654321987654321
Slot 9a:
        Algorithm:      RSA2048
        Subject DN:     {好きに設定していい}
        Issuer DN:      {好きに設定していい}
        Fingerprint:    4567891234567891234567891234567891234567891234567891234567891239
        Not Before:     Feb 16 06:50:47 2018 GMT
        Not After:      Jan  1 06:50:47 2119 GMT
Slot 9c:
        Algorithm:      RSA2048
        Subject DN:     OU=Verified Email: y.xxxxxxx@example.com/emailAddress=y.xxxxxxx@example.com/UID=7894561237894561237894561231234
        Issuer DN:      C=US, O=IdenTrust, CN=TrustID CA A12
        Fingerprint:    123789456123789456123789456123789456123789456123789456123789456
        Not Before:     Feb  2 15:26:03 2018 GMT
        Not After:      Feb  2 15:26:03 2019 GMT
Slot 9d:
        Algorithm:      RSA2048
        Subject DN:     {好きに設定していい}
        Issuer DN:      {好きに設定していい}
        Fingerprint:    4567891234567891234567891234567891234567891234567891234567891239
        Not Before:     Feb 16 06:51:10 2018 GMT
        Not After:      Jan  1 06:51:10 2119 GMT
PIN tries left: 3
```

こう言う結果が出力されていれば正常な状態です。
slot 9cのDigital Signatureは、IdenTrustという有料の承認サービスから得られる証明書を取り込んでいますので、一応書き記しました。
今のご時世（？）S/MIMEのDigital Signatureを使っている人は少なく、無料で発行できるものをあえて、有料のS/MIMEのDigital Signatureを使いたくて購入しました。
社会人なんだし、お金使おうぜ！ってところですね。

余談でした。

## まだわかってない部分

Card AuthenticationというCAK(Card Authentication Key)を使うタイミングはどこなんだろう。
これだけ謎ですねー、Yubikeyってカードじゃないですもんね。
マイナンバーのカードはあれも同じ仕組みだそうで、中身を見た人がいるようですが、規格として当然、Slotの9a、9c、9dがあるそうです。
へーって感じですよね。（どうでもよくなってきた）

# まとめ

というわけで、Yubikeyは正しく設定すれば他のマシンにも使えるということがわかりました。
さらに正しい設定がどういう状態かよくわかりました。
PUKってそもそも用途してはデフォルトblockなんだっていうこともわかりました。
その他、Yubikeyに記憶させたHOTPやStatic PasswordやGPG情報は消失しないことがわかりました。

安心して、resetしまくってください。
SSHの公開鍵を設定するのめんどくせ……。
個人利用のサーバ台数が少なくて助かりました。