はじめに
4月末に行われた RSAカンファレンス以降、たった1月もたたないうちに WebAuthn, FIDO 2 界隈は大きな盛り上がりを見せています。
WebAuthn に関しては、すでに Firefox は対応を発表していますし、先日の Google #IO 2018 に関連する記事 では Chrome の WebAuthn の紹介がされています。
また 先日の記事 のように Microsoft Windows 10 では FIDO2 対応の Security Key を利用した Azure AD ログオンが発表されました。
Security Key by Yubico
ところで、先日発売されました FIDO2対応デバイス Security Key by Yubico ですが、みなさん入手されましたでしょうか。
この Security Key by Yubico (以下 Security Key )ですが、 FIDO U2F だけでなく FIDO 2.0 (CTAP2) にも対応しています。
CTAP2 とは FIDO Alliance で策定されている Client(ブラウザなど)と Authenticator(Security Keyなど)との通信プロトコルのスペックです。
FIDO U2F の CTAP1 から拡張され、CBOR形式のバイナリで通信するようになり、 PIN や Biometrics オプションを流し込めるようになっています。
弊社にも先日届いたはいいものの、実際まだ FIDO2 に対応したサービスやコードが見つからず、試そうにも試せなかったのですが
ここ数日、続々と WebAuthn 関連のニュースとともにサンプルプログラムが出てきましたのでいくつかご紹介します。
Google Chrome Beta
一番大きなアップデートは Google Chrome が CTAP2 に対応(開発版)したことでしょう。
Chrome Beta version 67 以上 (もしくは Dev, Canary でも動作しました)
Chrome Beta 版は以下からダウンロードできます。
Chrome の起動時に、オプションとして --enable-features=WebAuthenticationCtap2 をつけることによって CTAP2 が有効になります。
Chrome Beta が無事起動しましたら、このページに戻り、おもむろに F12 を押してコンソールに以下のように打ち込みます。
www.yubion.com の RP(アプリ)と id “abcdefghijklmnopqrstuvwxyz123456” のユーザ用のクレデンシャルを作成します。
Security Key by Yubico (以下 Security Key)がPCに刺さっていると、アクセス許可を求められ、Allow を選択すると、ぴこぴこ光りだしますのでタッチします。
Security Key からのレスポンスがコンソールに表示されます。
私は ByteArray を読める機械人間ではないので、お試しはここまでにして、サーバーサイドのコードを覗いてみます。
WebAuthn.org
ということで、お試しサーバーが webauthn.org で公開されています。
早速アクセスして ユーザ名を入力し register をクリックしいます。もちろん、 Chrome Beta でアクセスし Security Key は刺したままにしておきます。
Security Key へのアクセスを求められるので Allow を押して UserPresense のために Security Key をタッチします。
キーの登録が完了します。
同様の手順でログインを行って、ログインできることを確かめてみます。
webauthn.org では ADVANCED を開くと詳細な通信データが表示できます。
細かく見てみると U2F の時には空だった AAGUID に値が入っています。
AAGUIDはとれているので CTAP2 で動いているのは確かなのですが、 PIN オプションは実装されていないようので、PINを設定した Key では動きませんでした。
ということは getInfo で clientPin: “true” なら、device へ送る request にも pin が必要ということでしょうか?
ちなみに CTAP2 では using pinToken の項で説明されているとおり SHA256と ECDH を利用した Diffie–Hellman Key Exchange を利用して暗号化して送信します。
Yubico python-fido2
Security Key の販売もとの Yubico の python 製 CTAP2 ライブラリです。
example/get_info.py を動かしてみると
Chrome での例と aaguid は一致することは確認できますね(;'∀')
こちらのライブラリには PIN の設定や PIN を利用した Authentication も利用できそうですので CTAP2 について理解を深めたいのであれば、詳しく見ることをお勧めします。
私もスペックと併せてコードを追っていきたいと思います。
終わりに
まだまだ CTAP2 の実装は出てきたばかりですが、これから多くのプラットフォーム、ブラウザで利用できるようになると期待されています。
弊社ではこれからも FIDO など最新の認証技術について、情報の調査発信をしていきますので、こちらのブログもフォローしてくださるとうれしいです。