标准 · FIDO CTAP 2.2混合(通行密钥QR)

我应该扫描这个通行密钥登录QR吗?

仅当您刚刚在显示QR的设备上发起了通行密钥登录时,扫描才是安全的。如果QR由他人生成——陌生人、“服务台”人员、技术支持来电者——在您的手机上扫描,会将对方登录到您的账户,而非您自己。该协议的开放标准(FIDO CTAP 2.2混合)本身是可靠的;威胁来自围绕“谁先点击了'使用通行密钥登录'按钮”的社会工程学攻击。

检测通行密钥QR → 所有标准 →

跨设备通行密钥登录的工作原理

通行密钥是一种凭证——公私钥对,绑定到您的某台设备。如果您在手机上为 example.com 注册了通行密钥,只有该手机才能签署 example.com 的登录验证请求。

当您在手机上登录时,这没有问题。但如果您在一台没有该网站通行密钥的笔记本上登录,会怎样?您可以:

  1. 输入密码——这完全违背了通行密钥的意义。
  2. 在笔记本上注册新的通行密钥——可以,但仅在您长期信任该笔记本的前提下。
  3. 通过跨设备传输使用手机通行密钥——笔记本显示QR,手机扫描后签署验证请求,笔记本浏览器收到结果,登录完成。

第三个选项正是FIDO CTAP 2.2“混合”所定义的内容。QR是引导入口,它包含足够的信息,让您的手机通过蓝牙低功耗发现笔记本,建立一次性安全隧道,并代理WebAuthn验证流程。

QR内部包含什么

URI格式如下:

FIDO:/0123456789012345678901234567890123456789...

十进制数字是CBOR映射的base10编码。经base10解码 + CBOR解析后,映射包含整数键:

键0,对端公钥

未压缩的X9.62公钥字节(P-256为33字节)。手机用此建立加密隧道。

键1,QR密钥/隧道随机数

10字节随机数据。标识该特定QR;BLE广播会播出其哈希值,以便手机找到正确的笔记本。

键2,操作提示

0 = 创建凭证(注册新通行密钥),1 = 获取断言(登录),2 = 可发现凭证。

键3,隧道服务器域名

当直接BLE不可达时(如跨NAT),用于在两台设备间代理隧道的HTTPS主机。通常为厂商运营的服务器,如 cable.ua5v.com(Google)或 cable.auth.com(Apple/微软)。

键4,时间戳

QR生成时的纪元秒数。用于重放保护——手机会拒绝处理几分钟前的QR。

键5,状态辅助标志

布尔值。表示笔记本是否希望手机参与被动状态维护(主要与凭证枚举流程相关)。

威胁模型:谁先按下了“使用通行密钥登录”?

该协议在密码学上是可靠的。蓝牙近场检测是真实的,将攻击限制在物理上接近您的人。那么攻击如何发生?

通过对发起步骤的社会工程学攻击。攻击者在他们的笔记本上发起以您账户名义的通行密钥登录。他们的笔记本显示FIDO QR。他们以某种方式让这个QR出现在您面前:

如果您扫描了,您的手机会将您的通行密钥签名代理回攻击者笔记本的浏览器。您持有通行密钥的网站认为是您登录了。攻击者现在已登录您的账户。

注意,近场检测在此无济于事——攻击者就在您身边。QR内容也无济于事——它们在密码学上是有效的。登录目的地也无济于事——它是您确实持有通行密钥的正确网站。唯一有效的防御是识别这种情境:您永远不应该扫描一个不是由您自己在自己的设备上点击“登录”生成的FIDO QR。

我们的扫描仪显示的内容

将FIDO QR拖入我们的扫描仪后,判定结果显示:

威胁等级始终为可疑——不是因为协议存在问题,而是因为安全判断取决于具体情境,扫描仪无法知道是谁点击了“登录”。判定结果中的说明会明确告知:“扫描此QR将完成他人在另一台设备上发起的登录。如果您没有刚刚自己发起登录,请拒绝。”

何时安全(及何时不安全)

安全:您坐在笔记本前,打开银行或邮件网站,点击“使用通行密钥登录”,笔记本显示QR。您拿起手机,扫描QR,确认临近提示。完成。

不安全:由您以外的任何人发起登录。这包括电话中的任何人、远程支持通话中的任何人、通过电子邮件发送QR给您的任何人、向您展示“QR以验证身份”的任何人,以及出现在您自己当前设备屏幕以外任何地方的QR。

如果不确定QR是否来自您自己发起的登录,请在原设备上取消登录(关闭浏览器标签页),然后从您打算使用的设备重新开始。真实的FIDO QR仅在约10分钟内有效,重新发起会清除所有进行中的会话,从根本上消除威胁。

相关内容

检测FIDO QR

上传图像或粘贴FIDO: URI。判定结果显示操作类型、隧道服务器、时间戳,并给出强烈警告:除非是您自己发起的登录,否则请拒绝扫描。

打开扫描仪 →