谷歌多因素验证中安卓手机蓝牙登录的原理是什么?

2021-03-04 17:13:49 +08:00
 vevlins

https://www.landiannews.com/archives/57473.html

按照效果图,pc 端没有其他操作,手机怎么知道靠近了电脑?

按照我的想法,至少也要手机端搜索下附近蓝牙的 id,跟电脑的蓝牙 id 进行匹配。但是 webjs 不支持获取本机蓝牙 id 的能力,而且 webjs 操作蓝牙也要弹窗提示框进行配对。

2067 次点击
所在节点    程序员
8 条回复
vevlins
2021-03-04 17:22:42 +08:00
是不是必须在 chrome 下?谷歌自家背后做了这个匹配逻辑
qbqbqbqb
2021-03-04 17:39:37 +08:00
这个是 FIDO2 WebAuthn 认证,是新的 Web 标准里东西。相应的物理密钥设备本身就包含 usb, nfc 和蓝牙三种形式,同时还支持非物理密钥比如 Windows Hello,以后的浏览器都要原生支持的。

根本不是什么 js 直接读蓝牙。
qbqbqbqb
2021-03-04 17:49:38 +08:00
更正一下,“以后的浏览器都要原生支持的”不准确。谷歌的这个认证是同属于 FIDO2 协议的,但更类似于 Windows Hello 这种平台相关的虚拟密钥(和原来就有的蓝牙物理密钥反而关系不大)。这样看来别的浏览器应该没法支持。
wooyuntest
2021-03-04 20:46:05 +08:00
FIDO2 webauthn
可以了解下 yubikey
ysc3839
2021-03-05 00:23:46 +08:00
个人推测是私有协议。
不过 Google 之前推出过一个安全密钥,也是能通过蓝牙进行认证,也有可能存在通用标准,Android 上 GMS 实现了这个标准。
also24
2021-03-05 00:44:05 +08:00
翻了一下,协议在这里:
https://fidoalliance.org/specs/fido-v2.0-rd-20180702/fido-client-to-authenticator-protocol-v2.0-rd-20180702.html#ble


楼主对于『蓝牙 id 』的理解是存在误区的,实际上 BLE 更常用的模式是根据 Service UUID 进行筛选连接。
如果附近只有一个设备提供了指定 UUID 的 Service,那么可以直接连接进行读写触发认证。

而 Web Bluetooth API 也完全具备相应的功能:
https://developer.mozilla.org/en-US/docs/Web/API/Web_Bluetooth_API
vevlins
2021-03-05 10:16:14 +08:00
@also24 描述中的 webjs 操作蓝牙的能力就是指 Web Bluetooth API,我当时疑惑的是 web bluetooth api 配对时要弹出一个下拉列表,主动选择连接哪个。在网站的动图中没看到。
also24
2021-03-05 10:29:48 +08:00
@vevlins #7
看来还是没有说清楚,绝大部分 BLE 设备都是非加密的,是不需要配对就可以读写的,需要的只是搞清楚目标设备是哪一个。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/758513

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX