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社のデモサイトで試してみるのがお手軽です。
まず適当なユーザー名とパスワードでNextボタンを押すと、Chromeでポップアップ画面が表示されます。
ここで、YubiKey NEOをタッチすると…
この様にデバイスの登録が完了します。
続いて、先ほどのユーザー名、パスワードでログインすると…
ログインに成功しました。簡単ですね!
同様に、GoogleでU2Fの多要素認証を設定するのも簡単です。
Googleアカウントの2 段階認証プロセスのページからセキュリティキーの追加できます。
この様な画面で、
YubiKeyにタッチするだけです。
たったこれだけです。
ただ、この様な物理的セキュリティトークンを実用していると、トークンを落とした際のリスクが心配ですね。 Googleはセキュリティトークンが手元にない場合は、スマートフォンでのOTP(Google 認証システム)や電話での通知を行うオプションがあるので安心です。
引き続き、YubiKeyでGnuPG,SSHで利用する方法も紹介していきたいと思います。
OTPなどの機能は要らないからFIDU U2Fだけ使いたいという人は、FIDO U2F SPECIAL SECURITY KEYという製品も売っていますのでこちらをどうぞ。