【WebAuthn】認証器としてTouch IDが利用されたかどうか判定してみる
はじめに
WebAuthnで認証器としてMacBookのTouch IDが利用されたかどうかRPで判定したい気がしていた。
するとGWに手が滑ってMacBook Air (Retina, 13-inch, 2018)を買ってしまい、手持ちのMacBookが二台になって検証できるようになった。
せっかくなので検証して、その結果をメモしておく。
今回は以下のデモサイトを用いて検証する。
demo.yubico.com
認証器のモデルの判定
認証器のモデルの特定はaaguid (Authenticator Attestation GUID) でおこなう。
上記で紹介したデモサイトでYubicoの製品を使って登録をすると、以下のように製品のモデルが表示される。
Security Key
YubiKey 4 Series
おそらくこの判定もaaguidによりおこなっているのではないかと思う。 (YubiKey 4 Seriesはfido-u2f attestationなのにaaguidから正確に判定できているのか謎)
fido-u2f attestationはaaguidが0x00になるので注意が必要だが、Touch IDはpacked attestation (self attestation) なので問題なさそう。
Touch IDの判定
さっそくデモサイトでTouch IDを利用してみる。
以下は、登録後の画面。先ほどのYubicoの製品を利用した時みたいに製品の情報は表示されない。
次に、MacBook Air (Retina, 13-inch, 2018)とMacBook Pro (13-inch, 2016, Four Thunderbolt 3 Ports)それぞれで登録を行い、aaguidを比較してみる。
- MacBook Air (Retina, 13-inch, 2018)
{ "success": true, "attestationObject": { "attStmt": { "alg": -7, "sig": "MEUCIFzidjErMHcC09YUGplSH05BYu++nNgJ3qWxwopRbneGAiEA5Ouclw1Pflm1vuKnDeMGPRqKiUj3PjUpIIxkRtHd0mk=" }, "authData": { "credentialData": { "aaguid": "rc4AAjW8xgpkiwsl8fBVAw==", "credentialId": "AD3ZP3yPHJOtnEhNBbgftElwebHu2+mkJXjQqa5y4knrC13X7Xie/PWNugSr/UXWiKvJ6ZeIXhxmYZMCSMmpLQ/kInELz5/BRVkSZsYUE7Wq+3s5Y6tnpGjUJwCrkvJaYzA=", "publicKey": { "1": 2, "3": -7, "-1": 1, "-2": "epkLJQNrfh9m9p4nwGo7sK1GMgglkQazvqNIyL1flBA=", "-3": "f+rTwucl+o1/rYjLpMrSlx1cDBIiGIQBwa2UjFrA62g=" } }, "flags": { "AT": true, "ED": false, "UP": true, "UV": true, "value": 69 }, "rpIdHash": "xGzvgq0bVGR3WR0Aiwh1nsPm0uy085R0v+ppaZJdA7c=", "signatureCounter": 1561032466 }, "fmt": "packed" }, "clientData": { "challenge": "sAYJw8ryLy_jyDqX9jADGwj_4-x54aavrc41kfMZ1q0", "origin": "https://demo.yubico.com", "type": "webauthn.create" }, "device": { "name": "Unknown device", "type": "unknown" } }
- MacBook Pro (13-inch, 2016, Four Thunderbolt 3 Ports)
{ "success": true, "attestationObject": { "attStmt": { "alg": -7, "sig": "MEQCICdX4bExE0u8FPdx6rgTXdqFGt9xD+VLpf+7r/NNQ2YCAiBsv9N+jlIsiS/6sOAX+geEUL5H7ThTrroR+NN9cI3itw==" }, "authData": { "credentialData": { "aaguid": "rc4AAjW8xgpkiwsl8fBVAw==", "credentialId": "AEYJafU1xWSslkoR25s3tRzd5cJGqPttejySu76wdORtcM4PjKwJtWKaYjDUw851MfnHgSjXRlV+M8AUTrJrOyvVy8N3/SAZMKfn0tZr5jsKOiUr6oIWq8Px/WPReEybwLU=", "publicKey": { "1": 2, "3": -7, "-1": 1, "-2": "ldU1EdHtJywMgfm8cYydb4c/oH59o9Mnr2PDBl77vqE=", "-3": "PJohvgh2OZbT/c6z+qrv8Jiyu94PIV0RxxgnXuJJdXw=" } }, "flags": { "AT": true, "ED": false, "UP": true, "UV": true, "value": 69 }, "rpIdHash": "xGzvgq0bVGR3WR0Aiwh1nsPm0uy085R0v+ppaZJdA7c=", "signatureCounter": 1561015243 }, "fmt": "packed" }, "clientData": { "challenge": "HNjfDLl8ASZpI8s-VB7SE7nqew1ddQo89DnLVyb0klc", "origin": "https://demo.yubico.com", "type": "webauthn.create" }, "device": { "name": "Unknown device", "type": "unknown" } }
MacBook Air (Retina, 13-inch, 2018)とMacBook Pro (13-inch, 2016, Four Thunderbolt 3 Ports)でaaguidは同じだった。
おそらく、ChromeからMacBookのTouch IDを認証器として呼び出した場合のaaguidはrc4AAjW8xgpkiwsl8fBVAw==
になるようだ。
おわりに
以下まとめです。
確証はないが認証器としてTouch IDが利用されたかどうかは判定できそう
MacBook AirとMacBook Proでaaguidに変化はない
Chrome以外のブラウザから認証器としてTouch IDを呼び出した場合にどうなるかは不明
おまけ
別の人がMac Book Proを持っていたので念には念をいれて一応確認してみた。
{ "success": true, "attestationObject": { "attStmt": { "alg": -7, "sig": "MEUCIQDw3lx6tfEJWDH2+VDCrZE2giDbI2z8Skx4YNtzFGA72QIgR6ucKwCfWEShXQAHPqPwXNv5cNsjBegsGh9YO3C2FUI=" }, "authData": { "credentialData": { "aaguid": "rc4AAjW8xgpkiwsl8fBVAw==", "credentialId": "AB1ZRA8GxEx5Q37k5csN9glkPrmZXx/pG/zRWaD5Ccz5okPBScxmCUN+mjjo9Lu0SKQXvTTDAQHgnu+weefXzRtbqWcc5E9GfjuPMcQPJLrgN282ffuwgBcHwdgd9qzvxXw=", "publicKey": { "1": 2, "3": -7, "-1": 1, "-2": "/enNu+rmfc1g/OO6yq5u+ygYcN0N2ew/TiCpxh85bOk=", "-3": "hIyjyekzludhdfhWjhuPWsm/wxwSYALsxqNlyGpy/cw=" } }, "flags": { "AT": true, "ED": false, "UP": true, "UV": true, "value": 69 }, "rpIdHash": "xGzvgq0bVGR3WR0Aiwh1nsPm0uy085R0v+ppaZJdA7c=", "signatureCounter": 1561015290 }, "fmt": "packed" }, "clientData": { "challenge": "_-iFeOfhI4ZNFgrx3uWQSdWLMvHJf_SmA38Xu_ybzOU", "origin": "https://demo.yubico.com", "type": "webauthn.create" }, "device": { "name": "Unknown device", "type": "unknown" } }
やっぱりrc4AAjW8xgpkiwsl8fBVAw==
だった。