键0,对端公钥
未压缩的X9.62公钥字节(P-256为33字节)。手机用此建立加密隧道。
标准 · FIDO CTAP 2.2混合(通行密钥QR)
仅当您刚刚在显示QR的设备上发起了通行密钥登录时,扫描才是安全的。如果QR由他人生成——陌生人、“服务台”人员、技术支持来电者——在您的手机上扫描,会将对方登录到您的账户,而非您自己。该协议的开放标准(FIDO CTAP 2.2混合)本身是可靠的;威胁来自围绕“谁先点击了'使用通行密钥登录'按钮”的社会工程学攻击。
通行密钥是一种凭证——公私钥对,绑定到您的某台设备。如果您在手机上为 example.com 注册了通行密钥,只有该手机才能签署 example.com 的登录验证请求。
当您在手机上登录时,这没有问题。但如果您在一台没有该网站通行密钥的笔记本上登录,会怎样?您可以:
第三个选项正是FIDO CTAP 2.2“混合”所定义的内容。QR是引导入口,它包含足够的信息,让您的手机通过蓝牙低功耗发现笔记本,建立一次性安全隧道,并代理WebAuthn验证流程。
URI格式如下:
FIDO:/0123456789012345678901234567890123456789...
十进制数字是CBOR映射的base10编码。经base10解码 + CBOR解析后,映射包含整数键:
未压缩的X9.62公钥字节(P-256为33字节)。手机用此建立加密隧道。
10字节随机数据。标识该特定QR;BLE广播会播出其哈希值,以便手机找到正确的笔记本。
0 = 创建凭证(注册新通行密钥),1 = 获取断言(登录),2 = 可发现凭证。
当直接BLE不可达时(如跨NAT),用于在两台设备间代理隧道的HTTPS主机。通常为厂商运营的服务器,如 cable.ua5v.com(Google)或 cable.auth.com(Apple/微软)。
QR生成时的纪元秒数。用于重放保护——手机会拒绝处理几分钟前的QR。
布尔值。表示笔记本是否希望手机参与被动状态维护(主要与凭证枚举流程相关)。
该协议在密码学上是可靠的。蓝牙近场检测是真实的,将攻击限制在物理上接近您的人。那么攻击如何发生?
通过对发起步骤的社会工程学攻击。攻击者在他们的笔记本上发起以您账户名义的通行密钥登录。他们的笔记本显示FIDO QR。他们以某种方式让这个QR出现在您面前:
如果您扫描了,您的手机会将您的通行密钥签名代理回攻击者笔记本的浏览器。您持有通行密钥的网站认为是您登录了。攻击者现在已登录您的账户。
注意,近场检测在此无济于事——攻击者就在您身边。QR内容也无济于事——它们在密码学上是有效的。登录目的地也无济于事——它是您确实持有通行密钥的正确网站。唯一有效的防御是识别这种情境:您永远不应该扫描一个不是由您自己在自己的设备上点击“登录”生成的FIDO QR。
将FIDO QR拖入我们的扫描仪后,判定结果显示:
cable.ua5v.com、Apple的隧道服务器等)?威胁等级始终为可疑——不是因为协议存在问题,而是因为安全判断取决于具体情境,扫描仪无法知道是谁点击了“登录”。判定结果中的说明会明确告知:“扫描此QR将完成他人在另一台设备上发起的登录。如果您没有刚刚自己发起登录,请拒绝。”
安全:您坐在笔记本前,打开银行或邮件网站,点击“使用通行密钥登录”,笔记本显示QR。您拿起手机,扫描QR,确认临近提示。完成。
不安全:由您以外的任何人发起登录。这包括电话中的任何人、远程支持通话中的任何人、通过电子邮件发送QR给您的任何人、向您展示“QR以验证身份”的任何人,以及出现在您自己当前设备屏幕以外任何地方的QR。
如果不确定QR是否来自您自己发起的登录,请在原设备上取消登录(关闭浏览器标签页),然后从您打算使用的设备重新开始。真实的FIDO QR仅在约10分钟内有效,重新发起会清除所有进行中的会话,从根本上消除威胁。
上传图像或粘贴FIDO: URI。判定结果显示操作类型、隧道服务器、时间戳,并给出强烈警告:除非是您自己发起的登录,否则请拒绝扫描。