WebAuthn もくもく会を開催しました

  • watahani
  • 17 Minutes
  • July 23, 2018

WebAuthn もくもく会#

実は土曜日に WebAuthnもくもく会 というものを企画して、来ていただいた2人と議論したり、各自もくもくしたりしてました。

当日なんだかんだで色々とお話ができたので、忘れないうちに話したことをまとめようとこのブログを書き始めました。



なんで突発的にもくもく会企画したのか#

最近仕事で FIDOまわりをさわる時間がなかったこと、いろいろとフラストレーションがたまってたこと。なんかやってやるぞという気持ちになったことなど…

よくわからないことが重なり、一人でもいいからと思いつつ、コッソリ connpass にイベント張ってみたところ、なんと参加してくださった人がいて、圧倒的感謝以外ありえない。

先に言いたいことを言っておくと、 FIDO 周りの技術的な議論って足りていないと思っていて、例えば

みたいなこと。

今回は もくもく会 ですので、作業中心でしたけれども、雑談交じりに議論できたこともあったのでまとめてみます。

FIDO 関連で、今なにが動くか的なこと#

YubiKey Android に刺したらU2Fは動くよって話をさせてもらった。意外と知られてなかったので少し悲しい。

代わりに @shiroica さんに Android Chrome の WebAuthn 先々週動いてたのに動かんくなってることを教えてもらった。

先々週は動いてた図

試してみると、ほんとに動かんくなってました。なんか問題があったんだろうか。

ところでそもそも Android SafteyNet Attestation ってなんだっけ?

Attestation チェックしなければマジ簡単#

Attestation の話になったとき、WebAuthn って Attestation チェックしなければマジ簡単に実装出来るよねという話に。

Extensions も無視すれば、マジで簡単なので今度のもくもく会では Most Simple WebAuthn Server を立てるのをしてみようかな~と、思いました。

で、実際今から WebAuthn 学び始める人は、最初 Attestation 無視してサーバー立ててみるのがいいんじゃないかーみたいな話をしてました。

順番的には多分以下の順で理解していくと、全体像がつかみやすいと思います。

  1. Public Key の登録と認証(MUST)
  2. Attestation チェック(MAY)
  3. Extensions (MAY)

Extensions について#

これはイマイチ私が分かってなかったので教えてもらいました。

大前提として Extensions は今のところ、以下の種類があること(たぶん)。

Authenticator が返す Extensions は Authenticator の署名がつくが、Client が返す Extensions は署名が付かず、credentials.create()credentials.get() の戻り値に含まれる getClientExtensionResults メソッドで取得できること。

ほとんどの Extensions は Authenticator 側でも Client 側でも実装して良さそうだとこと。

ということは Location Extensions なんかは Authenticator が返してもいいし、 Client が返しても良い。その場合は、署名が付いてる Authenticator 側のを優先するのかなぁ?

で、そんな話をしていると Location Extension を Authenticator が返すときってあるんですかね?という話になって

スマホがAuthenticatorになるときとかじゃないですか? って話になりました。

スマホがCTAP対応した Authenticator になる事について#

まずは CTAP 実装するのは大変だよねという話になりました。

まぁ、BLE や NFC の Low Level な実装をしなければならないので、そりゃ大変だろうね。

スマホが CTAP 対応して PC や他のスマホの Registration できるようになるのが理想だよね、ってのは大体みんな同意していたように思います。

つまりは、 PC ログインするときに スマホが FIDO 対応の Authenticator になって、CTAP で PC と通信(BLE or NFC)して、 YubiKey みたいな外部 Authenticator として動けばいいよねって話。

ただ、実際のユースケース次第では FIDO2 の Internal Authenticator として動けば十分だとも思ったり、Internal Authenticator や UAF としても動くし、 外部 Authenticator としても動くような Client 作れないかなあ(Google 先生が作ってくれないかなあ)みたいな、夢の話もしてました。

Server Requirements and Transport Binding Profile なる文書について#

金曜に @nov さんが読んでいた文書

これ、普通に WebAuthn のスペックの話だと思ったら、Server Requirements and Transport Binding Profile なる謎の文章でした。

タイポが多いこともさることながら、 Attestation のチェックが MUST だったり、

[[!WebAuthn#sctn-attestation-types]] defines multiple Attestation Types. A server MUST support one of the attestation formats.
Servers MUST support basic attestation

Servers MUST support self attestation

Servers MAY support Privacy CA attestation

Servers MAY support Elliptic Curve Direct Anonymous Attestation (ECDAA)

!??

えらい具体的なレスポンスメッセージがあったり

7.3.2. Examples
…略
Success Response:

HTTP Status Code: 200 OK

Body: application/json formatted ServerPublicKeyCredentialCreationOptionsResponse

    {
        "status": "ok",
        "errorMessage": "",
        "rp": {
            "name": "Example Corporation"
        },
        "user": {
            "id": "S3932ee31vKEC0JtJMIQ",
            "name": "johndoe@example.com",
            "displayName": "John Doe"
        },

        "challenge": "uhUjPNlZfvn7onwuhNdsLPkkE5Fv-lUN",
        "pubKeyCredParams": [
            {
                "type": "public-key",
                "alg": -7
            }
        ],
        "timeout": 10000,
        "excludeCredentials": [
            {
                "type": "public-key",
                "id": "opQf1WmYAa5aupUKJIQp"
            }
        ],
        "authenticatorSelection": {
            "residentKey": false,
            "authenticatorAttachment": "cross-platform",
            "userVerification": "preferred"
        },
        "attestation": "direct"
    }

私がナナメ読みした結果

This document contains a non-normative, proposed REST API for FIDO2 servers. While this interface is not required, it is the interface that is used for the FIDO2 conformance test tools so that servers can receive and send messages in a standard way for those messages to be validated by the conformance test tools.

that is used for the FIDO2 conformance test tools って書いてあるんで、来たる FIDO2 の Interoperability Testing に向けた文書っぽいねって話でまとまりました。

タブンネ

もくもく会でやったこと#

私以外の2人は KeyCloak の WebAuthn プラグインを作ったり U2F プラグインを試したりしていました。

私はというと、流されて KeyCloak をインストールして動かしてみたり、Yubico の ツールを scoop bucket に追加しようとしたり、 人生相談 をしたり…と

WebAuthn 周りのことは Server Requirements and Transport Binding Profile をパラパラナナメ読みするだけで終わって、作業自体はあまり進みませんでした。

所感#

もくもく作業が進まなかったのは反省ですが、先に書いた通り色々な意見交換や議論ができたことで、全体的には大満足でした。

冒頭に書いた

といった話だとか

みたいな話も今後、議論できるようにしていきたいですね。

ところで、今回の勉強会は、Yahoo! JAPAN オフィスの LODGE という 7/20 現在フリーで使えるコワーキングスペースで行ったのですが、隣の席と後ろの席とで、怪しいセミナーや振り込みが必要な塾生への勧誘が行われていたこと以外は とても素晴らしい場所でした。

また利用しようと思います!(なくならないでくれー)

最後に#

今週末は色々充実した二日間でした。

日曜日、朝からカラオケに行き、横浜のボードゲームカフェに行った後に、YELLOW SUBMARINE気になったボドゲ 買って、友人宅で遊ぶというコンボを決めて、夜中11時前、終電間際の電車に乗りながらこのブログを書いてます。

かなり酔っ払って書いてるので何か不備やマチガイがある可能性があります。ご了承ください。

関連記事