Linuxでも使える! FIDO U2F認証トークン


Yubico社のYubiKey NEOはOTP、FIDO U2F,NFC通信に対応したお手頃価格のUSB認証トークンです。 FIDO U2Fに準拠した多要素認証、ワンタイムパスワード認証、PKI証明書ストア、SSH、PGP, PAMなどの用途で利用できます。 FIDOに対応しているサービスはそれほど多くありませんが、現在の所GoogleやLastPassなどのサービスで多要素認証を行うことができます。 以前は輸入するしかなかったのですが最近Amazonで手軽に購入できるようになりました。

この手の認証デバイスはWindows用のドライバしか用意されてなかったりしてLinuxでは利用できなことが多々ありますが、その点YubiKeyは安心です。

OTPの利用だけならYubiKeyはキーボードとして認識されるので、専用ドライバ無しで動作します。 デバイスの管理ツールもオープンソースで公開されているのでLinux,MacOS,Windowsで問題なく利用できます。

DebianやUbuntuなどにはバイナリパッケージが用意されているので簡単にセットアップ出来ました。

# apt-get install ykneomgr yubikey-personalization

YubiKey NEOはOTP/FIDU U2F/SmartCardなどの利用モードを切り替えて利用することができます。 YubiKey NEOに設定できる利用モードは以下の通り。

0 OTP device only.
1 CCID device only.
2 OTP/CCID composite device.
3 U2F device only.
4 OTP/U2F composite device.
5 U2F/CCID composite device.
6 OTP/U2F/CCID composite device.

しかしykneomgr -mというコマンドで製品出荷時のモードを調べようとすると、

% ykneomgr -m
error: ykneomgr_discover_match (-4): Backend error

というエラーで現在の利用モードを調べることが出来ませんでした。 YubiKey NEOは出荷時にモード0(OTPのみ)に設定されており、このツールはPCSC経由で操作を行っているためにモードの参照/変更が出来ない、という罠でした。

ykneomgrを利用するためには、まずrootユーザーでykpersonalizeを実行し、利用モードを設定する必要があります。

# ykpersonalize -m 6
Firmware version 3.4.0 Touch level 1797 Program sequence 1
Unsupported firmware revision - some features may not be available
Please see 
https://developers.yubico.com/yubikey-personalization/doc/Compatibility.html
for more information.

The USB mode will be set to: 0x6

Commit? (y/n) [n]: y

これで、OTP/FIDO U2F/CCIDと3種類の機能を利用できるようになりました。 YubiKeyを挿し直すと、ykneomgrコマンドでトークンの状態を確認できます。

% ykneomgr -m
06
% ykneomgr -l
0: Yubico Yubikey NEO OTP+U2F+CCID 00 00

さっそく、google-chromeなどのブラウザでU2F認証を利用したいところですが、 このままでは一般ユーザーでデバイスにアクセスする権限がなく、google-chromeなどのブラウザで利用することは出来ません。

udevのルールに、

SUBSYSTEM=="usb", ATTR{idVendor}=="1050", MODE="0660", GROUP="plugdev"

と書きたいところですが、これでもChromeからデバイスにアクセスすることは出来ませんでした。

こちらにある通り、ACLでchromeを実行する一般ユーザーにowner権限を与える必要がありました。

/etc/udev/rules.d/70-u2f.rules

ACTION!="add|change", GOTO="u2f_end"

KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1050", TAG+="uaccess"

LABEL="u2f_end"

これでudevを再起動するとgoogle-chromeでU2F認証するための準備が整いました、 FIDO U2Fの検証はYubico社のデモサイトで試してみるのがお手軽です。

Yubico Demo1

まず適当なユーザー名とパスワードでNextボタンを押すと、Chromeでポップアップ画面が表示されます。

Yubico Demo2

ここで、YubiKey NEOをタッチすると…

Yubico Demo3

この様にデバイスの登録が完了します。

続いて、先ほどのユーザー名、パスワードでログインすると…

Yubico Demo4

ログインに成功しました。簡単ですね!

同様に、GoogleでU2Fの多要素認証を設定するのも簡単です。

Googleアカウントの2 段階認証プロセスのページからセキュリティキーの追加できます。

この様な画面で、

Google Test1

YubiKeyにタッチするだけです。

Google Test2

たったこれだけです。

ただ、この様な物理的セキュリティトークンを実用していると、トークンを落とした際のリスクが心配ですね。 Googleはセキュリティトークンが手元にない場合は、スマートフォンでのOTP(Google 認証システム)や電話での通知を行うオプションがあるので安心です。

引き続き、YubiKeyでGnuPG,SSHで利用する方法も紹介していきたいと思います。

OTPなどの機能は要らないからFIDU U2Fだけ使いたいという人は、FIDO U2F SPECIAL SECURITY KEYという製品も売っていますのでこちらをどうぞ。