Android × U2F で FIDO 認証する （USB直刺しで使えるようになったよ～）

# はじめに

昨日家に帰って携帯から Google アカウントにアクセスしようとしたら、久々のログインだったためか 2要素認証の verification が出てきた。
私の携帯には NFC がついていないため、いつもは Google Authenticator の TOTP でログインしていたのだが…

[![2018-01-17_10h20_11.png](https://qiita-image-store.s3.amazonaws.com/0/83984/ce12cda3-6fff-cb2d-02b1-ddf123de22ee.png)](https://twitter.com/watahani/status/953281385451565057)

<h3> USB オプション追加されとるー！</h3>


## 動作環境

* Android 7.0
* YubiKey 4, 4C, Neo
* Google
* Chrome v63.0.3239.111
* Google Authenticator v5.00

実際に試す場合は注意点を先に読んだほうが良いです。

## 何をする？

PCで使っている U2F のキーを、Android上の Chrome で使います。注意点にもありますが、~~TOTP は使わないのに Google Authenticator が必要です。~~

>多分 Google Play services に統合されました。下の図のGoogle Authenticator となっている部分が GPS(Google Play開発者サービス）のAPIになってます。


![2018-01-17_10h25_20.png](https://qiita-image-store.s3.amazonaws.com/0/83984/ed065c61-45c0-c603-ea07-c1abce5c86f3.png)


昨年9月のアップデートでひっそりと U2F が使えるようになっていたのですが、今回 Authenticator と U2F デバイスの通信に USB が、追加されました。

## 実際の動作

実際に U2F 対応サービス、 Google, facebook, Dropbox...etc などで使えます。
まだサービスにキーを登録してなかったり、とりあえず試してみたいだけであれば Yubico のDemoサイトで試せます。

Chrome ~~とGoogle Authenticator~~ の最新版がはいっていなければインストール or アップデートしてください。

<https://demo.yubico.com/u2f>

デモサイトなので適当な ID と パスワード (id/pass などでよい）で Next を押します。

![Screenshot_20180117-105320.png](https://qiita-image-store.s3.amazonaws.com/0/83984/4e7030b5-9b15-320e-9870-405da15d6b74.png)

Google Authenticator をインストールしていれば、自動で以下画面になるので

![Screenshot_20180117-104829.png](https://qiita-image-store.s3.amazonaws.com/0/83984/97c19f6b-bbf0-86f3-2648-77a0d29ae6d9.png)

YubiKey　Neo なら NFC でも使えますが、今回は USB でセキュリティキーを使用するを選択します。
（※私の格安スマホには　NFC がついてない…）

![Screenshot_20180117-104857.png](https://qiita-image-store.s3.amazonaws.com/0/83984/c1d7871b-d354-d2b9-3d41-e94a235b72e7.png)

かなりシュールな絵が出てきますが、変換ケーブルを用いるか Type-C のものを使い YubiKey をスマホに刺します。
Google開発者サービスのポップアップが出るようなら OKを押します。

YubiKey がピカピカ光っていれば認識できていると思うので、PCでするように金属端子をタッチします。

![Screenshot_20180117-104920.png](https://qiita-image-store.s3.amazonaws.com/0/83984/f9e60f54-fe99-89f3-2e29-c3e7a4d5f3d2.png)

うまく認識できれば デバイスの Verify が完了！



## 注意点

1. Google Authenticator は TOTP を使うわけじゃないがインストール必須
2. YubiKey 4 series は OTP モードをオフにしないと USB では認識されない
3. 一部の端末は USB を使う前に設定から登録が必要な場合がある

それぞれ軽く解説します

### 1. ~~Google Authenticator は TOTP を使うわけじゃないがインストール必須~~ => 基本的には Google Play servicesに統合されてます。

Google Authenticator(Google認証サービス）は言わずと知れた TOTP を表示するアプリです。
何をする？ でも話しましたが、実はこっそり U2F デバイスと通信する機能もついています。

![2018-01-17_10h25_20.png](https://qiita-image-store.s3.amazonaws.com/0/83984/ed065c61-45c0-c603-ea07-c1abce5c86f3.png)

今までは Google Authenticator と U2F デバイスの通信は Bluetooth か NFC だったのですが、いつの間にか USB でも通信可能になっていました。

> 2018-06-11 追記
> Android のバージョンによっては必要なさげです。少なくとも Andorid 8.0 では不要でした。

> ちょっと蛇足
>なぜOSネイティブではなく Google Authenticator につけたのかは、おそらくOSアップデートが追い付かない古い端末のために機能をアプリかしたのだと思う。
なぜChrome ではなく Google Authenticator に U2F サービスを組み込んだのかは、いろいろなアプリで使える API 的に使えるようになるのでは…と想像しているが、今のところこの API をほかのアプリから叩けるといったドキュメントは見当たらない。


### 2. ~~YubiKey 4 series は OTP モードをオフにしないと USB では U2F デバイスとして認識されない~~

> 2018-04-18 追記
> 久しぶりにためしたら、OTPモードオンでも問題なく使えるようになってました。素敵。

YubiKey 4, Neo シリーズは、 U2F だけでなく Yubico OTP を含めた OTP 出力機能、 PIV, OpenPGP のスマートカード機能など複数の機能が搭載されたセキュリティトークンです。
PCではそれぞれの機能を状況に合わせて利用できるのですが、Androidでは認識できないらしく OTP モードをオフにする必要があります。

以下から YubiKey Neo Manager をダウンロードして起動

[YubiKey NEO Manager | Yubico](https://www.yubico.com/support/knowledge-base/categories/articles/yubikey-neo-manager/)

起動したら、OTPをオフにしたいYubiKeyを挿入して、OTPモードをオフにします。

![2018-01-17_10h40_15.gif](https://qiita-image-store.s3.amazonaws.com/0/83984/77d2bbf4-4926-22fd-a67e-4e04aa0aa20c.gif)

YubiKey 4 でも Neo Manager で設定できます。

これで Android でも USB経由で U2F が使えるようになりました。
（当然 OTP は使えなくなりますが… ）

### 3. 一部の端末は USB を使う前に設定から登録が必要な場合がある

キャリア端末などは特にそのような設定がなされている場合があるので
以下の記事などを参考に　[USB接続設定]-[USB機器を検出]　などの設定を探して登録します。

http://www.iodata.jp/support/qanda/answer/s19559.htm

## その他

**Googleアカウントの新規追加など OSネイティブの U2F 認証では、まだ Bluetooth もしくは　NFC しか使えないようでした。**

今まで YubiKey を使っていて モバイルデバイスでは OTP しか使えなく、使いづらさを感じていたがこれで OTP を入力することのない未来にひとつ近づいた気がする。
自分でアプリに U2F を実装して USB や Bluetooth の通信を…とはやりたくないので、Chrome以外からもこれを使えるようなればなあと思う。

あ、YubiKey は[ソフト技研](https://www.yubion.com/)が Amazon で売ってますのでよろしくお願いいたします。

[![2018-01-17_11h06_57.png](https://qiita-image-store.s3.amazonaws.com/0/83984/0d9eeacd-f51f-50e9-0c0f-31b1d60d32bf.png)](http://amzn.to/2mMfoCd)