Yubikeyとは？もろもろ検証してみました話 

エンタメ系企業の社内のいろいろを担当しているakibinです。

2019年10月ごろにYubikeyを購入して検証した内容を綴っていきます。

# Yubikey検証の目的
OSログインとGoogleログイン時の2段階認証目をYubikeyでやりたい！

また、検証の目的はログイン簡素化ではなく、従来のID・パスワードログイン後の2段階認証目をYubikeyを使用することで2要素認証を実現、セキュリティ強化を目的としています。（ここ重要）

# 前提知識（かんたんに）
**【FIDO（ファイド）】**
Fast IDentity Onlineの略で、従来のパスワード認証に代わる認証技術で、標準規格策定団体である[FIDO Alliance](https://fidoalliance.org/?lang=ja)が規格策定と推進を行っている。HPから、様々な企業が参加していることが伺えます。
<img width="150" alt="alt" src="https://1nmqmp2u9dgf3jo9centu6rq-wpengine.netdna-ssl.com/wp-content/uploads/2017/02/google-showcase.jpg"><img width="150" alt="alt" src="https://1nmqmp2u9dgf3jo9centu6rq-wpengine.netdna-ssl.com/wp-content/uploads/2017/02/github-showcase.png"><img width="150" alt="alt" src="https://1nmqmp2u9dgf3jo9centu6rq-wpengine.netdna-ssl.com/wp-content/uploads/ICBC-1.jpeg"><img width="150" alt="alt" src="https://1nmqmp2u9dgf3jo9centu6rq-wpengine.netdna-ssl.com/wp-content/uploads/softbank-300-1.jpg">　　などなど…

そして、FIDOには**UAF**と**U2F**の２つの規格がある
※実際はもう１つFIDO2というWeb認証の規格もあり、この記事では最後の方にちょっとだけ出てきます

**【UAF】**
Universal authentication Frameworkの略で、主に生体認証などのパスワードレス認証を行う規格

**【U2F】**
Universal 2nd Factorの略で、ID・パスワードの第1認証の後に、セキュリティキーなどによる第2認証を行う規格
**Yubikey**はこちらの**U2F**にあたる

# そもそもYubikeyとはなにかね？
「ユビ」という言葉が日本人に馴染みがありますね。「指人形」や「指相撲」、「指原〇〇」といった著名人や、「湯引き」なんて言葉もあります。
なので、「ユビキー」と初めて聞いたとき、「日本企業のものか…？」と思いましたが、そんなことはない、アメリカ・スウェーデンを拠点とする**[Yubico社](https://www.yubico.com/)**が開発したデバイスでした。
もしかしてだけど、ユビキーって名前はユビキタスから来てるんですかね？誰か教えてください。

というわけで、以下の３つのYubikeyを購入してみました。

**【YubiKey 5 NFC】**
USB-Aタイプで、U2FとFIDO2の他に、ワンタイムパスワード（OTP）などの機能を含むYubiky
<img width="150" alt="alt" src="https://media.yubico.com/media/catalog/product//y/u/yubikey-5-nfc_3.png">

**【YubiKey 5C】**
USB-Cタイプで、機能はYubiKey 5 NFCと同じ。MacbookPro用に購入
<img width="150" alt="alt" src="https://media.yubico.com/media/catalog/product//y/u/yubikey-5c_2.png">

**【Security Key by Yubico】**
USB-Aタイプで、U2FとFIDO2のみに対応
<img width="150" alt="alt" src="https://media.yubico.com/media/catalog/product//s/e/security-key-by-yubico-nl.png">

Yubikey検証の理由が「OSログインとGoogleログイン時の２段階認証目をYubikeyで！」なので、OTPなどはいまの所は使用しないですが、いずれは使うかも…ということでYubiKey 5 NFCも購入しました。
ただ、Security Key by Yubicoでも事足りそうなので、こちらも一応購入して、さて！早速検証スタート。

# OSログイン検証
## Windows
#### ・YubiOn Windowsログオン
[ソフト技研](https://sgk.co.jp/)さんの提供する[Yubion Windowsログオン](https://www.yubion.com/solution/yubion/)というサービスで、その名の通りWindowsログオン時にYubikeyによる2段階認証を提供するソリューションのようです。ちなみにソリューションの総称をYubionと呼ぶみたいですね。
基本有料のサービスですが、無料版もありましたので、[YubiOn Portal](https://es.yubion.com/)というのに登録して試してみました。ちなみにYubikey Portalログイン時にID・パスワードとYubikey認証が必須になっています。

【結果】
Windowsログオン時の［ID・パスワード＋Yubikey認証］が実現可能ですが、無料版ですとWindowsログオン画面で［ID・パスワードのみ］か、［ID・パスワード＋Yubikey認証］でログオンするか選択可能な感じでした。有料版だと［ID・パスワード＋Yubikey認証］を強制できるみたいですね。
いまのところ有料ソリューションを使用する予定がないので断念ですが、非常にスムーズに設定ができたので、追々有料版導入も検討してもいいかも。
#### ・Yubikey for Windows Hello
Windows10より導入されている[Windows Hello](https://www.microsoft.com/ja-jp/windows/windows-hello)（指紋認証や顔認証などの生態認証でWindowsへログインする機能）とYubico社が提供するアプリである[YubiKey for Windows Hello](https://www.microsoft.com/ja-jp/p/yubikey-for-windows-hello/9nblggh511m5?activetab=pivot:overviewtab)を試してみる

【結果】
と思ったのですが、Windows10でYubiKey for Windows Helloを使用するには、こちらもYubico社が提供する[Yubikey Manager](https://www.yubico.com/products/services-software/download/yubikey-manager/)を使ってYubikeyがCCIDモードになっているか、なっていない場合は有効にする必要があるようですが、このCCIDモードがちょっと前のYubike4とかNeoまでしか対応しておらず、5は非対応とのことでした…断念。

#### ・Microsoftアカウントを使用
Yubionの少し前の[YubiKey 5 でのパスワードレスログインが Microsoft Accounts にやってきた](https://www.yubion.com/trend/yubico-blog/893/)という記事を見つけ、WindowsにMicrosoftアカウントでログインしてればできんじゃね！？ということで試してみました

【結果】
[こちら](https://k-tai.watch.impress.co.jp/docs/column/todays_goods/1158600.html#018_m.jpg)の記事を参照させてもらいトライ、ブラウザはEdge必須ですが、Yubukeyを使用したMicrosoftアカウントへログインは実現できました！が、ログイン時にYubikeyのみでOKなので2段階認証ではなく簡素化となり、当初の目的と外れてしまったのと、肝心のWindowsログイン時にYubikeyを使用する設定がどこにも見当たらず…しまいにはEdgeからMicrosoftアカウントへのログインも不安定で最終的にYubikeyを使用してできなくなってしまいました…なんだかな～。

#### ・他にもいろいろ試してみたけれど・・・
その他、[こちら](https://qiita.com/yubaxp/items/5a0b77c45bac6adaf68a)の記事を参照させてもらい、Yubico社の[YubiKey Personalization Tools](https://www.yubico.com/products/services-software/download/yubikey-personalization-tools/)と[YubiKey Logon installation file](https://www.yubico.com/why-yubico/for-business/computer-login/windows-login/)を使用した方法をトライしましたが、YubiKey Logon installation fileのインストーラをダウンロードするためのメールがまったく届かず・・・「もういいわ！！」となりました。
様々なサービスがあるようなのですが、結果的に無料でやるとなるとあと一歩やりたいことまでたどり着けませんでした…。

## Mac
[こちら](https://qiita.com/naa0yama/items/712b6d37147bf780f43e)の記事を参照させてもらい、Yubico社の提供するYubiKey Personalization ToolとmacOS Logon Toolを使用して設定しました。
※途中にあるComputer Logon Toolsダウンロードのリンクが切れていますが、[macOS Logon Tool Configuration Guide](https://support.yubico.com/support/solutions/articles/15000015045-macos-logon-tool-configuration-guide)からmacOS Logon Toolをダウンロード、インストール可能です

大まかな設定の流れは以下。
1.[YubiKey Personalization Tool](https://www.yubico.com/products/services-software/personalization-tools/use/)をインストールしてMacでYubikeyを使用するための設定を行う
2.PAMモジュールである[macOS Logon Tool](https://support.yubico.com/support/solutions/articles/15000015045-macos-logon-tool-configuration-guide)をインストールする
3.YubikeyをMacに差し込んで、以下のコマンドをログイン対象のユーザで実行し対象のYubikeyを登録（ユーザ毎に設定）
 
```bash:~/
mkdir -m0700 -p ~/.yubico
ykpamcfg -2
```

4.PAMの設定ファイルに以下を追加（ユーザ毎に設定）

```bash:/etc/pam.d/screensaver
# screensaver: auth account
auth       required       /usr/local/lib/security/pam_yubico.so mode=challenge-response
```

```bash:/etc/pam.d/authorization
# screensaver: auth account
auth       required       /usr/local/lib/security/pam_yubico.so mode=challenge-response
```

この設定でYubikeyを挿入しないとMacにログインできなくなりましたが、これYubikeyなくした場合はどうなっちゃうんだろう…普通にログインできなくなりますよね。そうなるとバックアップ用のYubikeyを設定しておかないといけない？全ユーザにそれやるとなると、何個Yubikey必要なんだろ・・・。
うーん、あまり現実的ではないし、ローカルにデータを保存しないようにしておけば、OSへのログインはYubikey使わない方向の方がいいかも、Yubikey紛失時に他のバックアップ方法があればOSも考えてもいいかもね！と考えました。

# 各サービス検証
メジャーなもので以下を検証してみました。

|サービス名|使用可否|手順へのリンク|
|:---|:---:|:---|
|G Suite|◯|[Googleアカウントヘルプ](https://support.google.com/accounts/answer/6103523?visit_id=637017999756582514-1484367903&rd=1)|
|Slack|×|※Slackに問い合わせたらU2F非対応とのこと|
|AWS|◯|[AWSユーザガイド](https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_mfa_enable_u2f.html)|
|GitHub|◯|[こちら参照させてもらいました](http://blog.serverworks.co.jp/tech/2018/10/05/github-yubikey/)|
|Microsoftアカウント|△|先ほど紹介した手順で可能でしたが、あとからログインできなくなる|

あと、G Suiteに関してはいくつか懸念点があり、検証した結果が以下です。

|懸念点|検証結果|
|:---|:---|
|2段階認証の発生頻度をコントロールできるのか？|特権管理者で管理コンソールから可能。[こちら](https://support.google.com/a/answer/9176657?hl=ja)のヘルプページも参照|
|ドライブファイルエクストリームへのログインはYubikeyで可能か？|Windows、Mac共にドライブファイルエクストリームから直接Yubikey認証ではなく、ブラウザからYubikeyを使用してGoogleにログインすることで認証される|
|Android端末でYubikey認証可能か？|物理的に挿入できればYubikey認証可能|
|iPhoneでYubikey認証可能か？|物理的に挿入する方法ではなく、WindowsやMacのブラウザからYubikeyを使用してGoogleにログインして認証コードを発行、それをiPhoneで入力する必要がある|

各サービス共にYubikeyを紛失しても、管理者権限で2段階認証を無効にするなどしてバックアップできるのが安心ですね。
G Suiteの場合は2段階認証の頻度を調整するなど対応が必要ですが、概ねWebサービスへのYubikeyの導入は有効と思いました。

# そしてYubikeyも次のステップへ・・・
私以外のエンジニアにYubikey使ってみてもらったところ、「端末の生体認証などを使用したWebAuthとの併用ができなかった。」といった声があったのですが、最近生体認証の規格であるFIDO2（WebAuth）に対応した[Yubikey Bio](https://gigazine.net/news/20191108-first-biometric-yubikey/)なるものが発表されていました！！
こちらも購入して使ってみよう！ということで、検証結果はまた今度アップしますーー。

# G Suiteのログインセッション継続期間を短くしてみて検証（2020年5月14日追記）
G Suiteの[ログインセッション継続期間](https://support.google.com/a/answer/7576830)はデフォルトで14日、そこから1時間や24時間、30日などに調整ができます。
ちなみに設定した変更が有効になるのは既存の継続期間が終了してログオフして再度ログインした時からです。なので、デフォルトの継続期間（14日）経過するか手動でログオフしないとこの設定は有効になりません。
メーラーやモバイルアプリなどは14日を待ってどのような動作するかを待ちましたよ、待ちましたよ俺は…。

セッション継続期間を調整、各アプリでどのような動きをしたかは以下です。

- **PCのブラウザ（chrome）**<br>
継続期間を迎えるとログオフするが、ログイン時に[［このパソコンでは次回から表示しない］](https://support.google.com/accounts/answer/2544838?co=GENIE.Platform%3DDesktop&hl=ja&oco=1)にチェック有り無しで動作が変わる。<br>
有り：再ログイン時にID/PWのみ要求され、2段階認証（Yubikey）は要求されない<br>
無し：再ログイン時にID/PWと2段階認証が要求される
- **PCのメーラー（Outlook）**<br>
継続期間を迎えても再ログイン自体が要求されない
- **ドライブ ファイル ストリーム**<br>
継続期間を迎えても再ログイン自体が要求されない!
- **モバイルアプリ（AndroidのGmail）**<br>
継続期間を迎えても再ログイン自体が要求されないじゃない!!

PCブラウザでみんな無意識でチェックしちゃう［このパソコンでは次回から表示しない］を有効にしたり、他のアプリでも一度ログインしちゃうとその後Yubikeyの出番は無いようです…。

とはいえ、セキュリティ向上をメインではないにしても、手軽な2要素認証デバイスとして、またSSOメインで使用すれば、Yubikeyは使い勝手いいかもっすね！

****************************************

◆ Twitterアカウント
@AkibinMusic

◆ Youtubeチャンネル
https://www.youtube.com/channel/UC-JOpwEnJn3gCrUA4NdCYgg