-
Notifications
You must be signed in to change notification settings - Fork 30
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix for MakeCredential Response #6
base: develop
Are you sure you want to change the base?
Conversation
…ta. because it's defined in self attestation spec.
… request is client data hash.
ありがとうございます。 ざっと確認しましたが、効率化などに関する部分は問題ないかと思いました。 しかし、プロトコル部分に関する修正は以下の2点かと思いますが、意図が読めないところがありました。プロトコルに関する修正は、W3C仕様書のどの記述に基づいての修正なのか参照先を頂きたいです。あるいは他のライブラリとのInterOpで失敗する場合はどういった失敗が発生するのか具体的な情報を頂きたいです。 AttestationObjectのフォーマット変更WebAuthnKit-iOS/WebAuthnKit/Sources/Authenticator/Attestation.swift Lines 57 to 60 in 8301b13
CBORのMapフォーマットの部分で、キーに当たるStringをIntに変更しているようですが、このIntの各数値はどの仕様を参照されたものでしょうか? 自分も改めてこのあたりを確認してみましたが、キーは文字列で合っているように見えますし、 Yubicoのライブラリなども確認してみましたが、やはり文字列がキーになっています。 makeCredentialのパラメータ修正WebAuthnKit-iOS/WebAuthnKit/Sources/Client/Operation/ClientCreateOperation.swift Line 256 in 8301b13
hash計算した値ではなく、サーバーから受け取ったchallenge値をそのまま渡すように修正されていますが、こちらもどの情報を参照されての修正なのかを明示頂きたいです。 こちらも仕様を確認いたしましたが、 こちらのパラメタータに
と記述され、"serialized client data"のリンク先の説明には
と記述されていますし、サーバーから受け取ったchallengeではなく、JSONを作ったあとhashかけたものを渡すという仕様で間違いないように見えます。 また、同様にYubico実装など他のライブラリを追っても、同様の処理をしていますし、ここを変更してしまうと多くのサーバー実装との疎通が失敗してしまいます というわけで、以下確認いただきたく
Confirmation Toolでの確認は、自分もさぼっていたところですので、あらためて準備して確認してみようと思います。少し時間はかかるかもしれませんが。 |
レビューありがとうございます。 プロトコルの変更についての情報が不足しており申し訳ありません。 AttestationObjectのフォーマット変更こちらについてはFIDOのCTAPの仕様書の情報を参考にしています。 上記の仕様書の5.1 makeCredentialにレスポンスデータの詳細を示す表があります。この中にMember nameという項目があり、それぞれの名前の下にインデックスの数値が書かれています。 また、仕様書の6.2 ResponseのEXAMPLE 6にmakeCredentialのレスポンスデータ例が載っているのですが、こちらでもキーがString値ではなくInt値になっていることが確認できます。 ご紹介頂いたpython-fido2のソース中でもキー名はInt値で定義されており、toStringしたときにはString値で返してくれるようです。 makeCredentialのパラメータ修正こちらもFIDOのCTAPの仕様書の情報を参考にしています。 仕様書の5.1 makeCredentialのリクエスト値を表で示している箇所でclientDataHashのDefinitionがさらっと次のように説明してあります。
当初私もJSONを自分で作ってSHAハッシュを計算するのだと思っていましたが、何度やっても上手くいかず、仕様書を読み返して見たところ上記の記述を見つけて、実装してみたところ上手く行きました。 尚、これらの動作確認はConformance Toolでのみ行っており、実際のWebAuthnサーバーとクライアントでの動作確認はできていません。 |
情報ありがとうございます! 自分の方でもあとで該当箇所、読み込んでみたいと思いますが、 ちなみに現時点で自分がConfirmationToolについての知見がないので申し訳ありませんが、 本来WebAuthnのフローは
の三者間のフローですが、このSwiftライブラリはInternalなAuthenticatorのみ現在対応していて、 ConfirmationToolによる該当のテストがどのように行われたかを確認したいと考えています
CTAPの仕様はClientとAuthenticator間の通信仕様ですので、 また、既存のサーバー実装とのInterOpもあらためてしたいと思います。 というわけで以下のように進めたいと思います
これで問題なさそうでしたら、いただいた修正をそのまま適用したいと思います。 どこかで引っかかったら、また相談/確認させてください。 ご指摘ありがとうございました! |
ご確認ありがとうございます。 確かにYahoo Tech Blogの情報を見ると、ServerとClient間の通信ではキー名はStringで渡すのが正しいようで、WebAuthnKit-iOSの実装が誤っているということではないようです。失礼いたしました。 私はConformanceToolをClientに見立てて、WebAuthnKit-iOSを使ったAuthenticatorの動作確認をしています。 私の方でもこのまま確認を続けますので、WebAuthnKit-iOSがCTAP対応するために必要な個所が他に見つかりましたらプルリクエストを改めて上げさせて頂きます。 今後ともよろしくお願いいたします。 |
Add some fixes for MakeCredential Response test in Conformance Tool test.