硬件安全密钥实践指南 - 从 YubiKey 到 FIDO2

本文约需 13 分钟阅读

硬件安全密钥是当今最强的认证形式。与可被钓鱼的密码不同,与可被拦截的 TOTP 代码不同, 符合 FIDO2 标准的安全密钥会对请求站点的来源进行加密验证,使网络钓鱼攻击在数学上 变得不可能。Google 报告称,2017 年向所有 85,000 多名员工部署安全密钥后, 成功的网络钓鱼攻击降至零,这一成果已保持七年以上。YubiKey 5 NFC 的价格约为 50 美元起,却能消除网络安全中最大的单一攻击向量。本指南涵盖安全令牌的技术基础、 产品比较、主要服务的设置步骤、恢复计划,以及个人和组织的成本效益分析。

FIDO2/WebAuthn 的技术架构

要理解硬件安全密钥的强大之处,需要了解其基础 FIDO2 协议的工作原理。FIDO2 由 W3C 的 WebAuthn 规范和 FIDO 联盟的 CTAP (客户端到认证器协议) 组成。认证流程基于公钥加密。首次注册服务时,安全密钥内部生成公钥和私钥对。公钥发送到服务端保存,私钥存储在密钥的安全元件中,无法被提取。

登录时,服务发送一个随机挑战 (nonce)。安全密钥用私钥对这个挑战进行签名,并将签名数据返回给服务。服务使用保存的公钥验证签名,确认是合法的密钥持有者。在整个过程中,私钥本身从不在网络上传输。由于不存在像密码那样的「共享秘密」,即使服务器端的数据库泄露,认证信息也是安全的。

防钓鱼能力的技术依据

FIDO2 对钓鱼攻击无懈可击的原因在于来源验证。安全密钥生成签名时,浏览器传递的来源信息 (域名) 会包含在签名数据中。这意味着在 google.com 注册的密钥对不会响应来自 g00gle.com (钓鱼网站) 的挑战。由于浏览器自动验证来源,用户无需目视检查 URL,设计上不依赖人为判断失误。这是与 TOTP (基于时间的一次性密码) 的决定性区别。使用 TOTP 时,如果用户在钓鱼网站上输入代码,攻击者可以实时将该代码转发到正规网站。

主要产品比较

以下比较截至 2025 年市场上可购买的主要硬件安全密钥。选择标准包括 FIDO2/WebAuthn 支持、连接接口、NFC 支持、价格和耐久性。

YubiKey 5 系列是最广泛采用的产品。YubiKey 5 NFC (约 50 美元) 支持 USB-A 和 NFC,YubiKey 5C NFC (约 55 美元) 支持 USB-C 和 NFC。支持 FIDO2、U2F、智能卡 (PIV)、OpenPGP、TOTP 等多种协议,IP68 防水防震设计,物理耐久性高。无需电池,通过 USB 端口供电运行。在企业大规模部署方面有丰富经验,Google、Facebook、Salesforce 等已将其作为内部标准。

Google Titan 安全密钥搭载 Google 自主设计的固件,USB-C/NFC 型号约 30 美元。支持 FIDO2 和 U2F,但与 YubiKey 不同,不支持 OpenPGP 或智能卡功能。与 Google 账户深度集成,配合 Google 高级保护计划可实现最高级别的账户保护。Feitian ePass 系列是中国厂商的产品,约 25 美元起,价格最为实惠。虽然支持 FIDO2 基本功能,但在协议覆盖范围和企业支持方面不及 YubiKey。

支持的服务与设置步骤

以下介绍主要服务的安全密钥设置步骤。共同的前提是,在注册安全密钥之前,首先将账户密码更改为强密码,并准备好备用恢复手段 (备份代码、备用安全密钥)。

在 Google 账户中,通过「安全性」→「两步验证」→「安全密钥」进行注册。Google 最多可注册 5 个安全密钥,推荐主密钥和备份密钥的双密钥体制。注册高级保护计划后,安全密钥成为唯一的登录方式,SMS 和应用认证将被禁用。这可以完全防止 SIM 交换攻击和通过钓鱼窃取认证代码。

GitHub 通过「Settings」→「Password and authentication」→「Two-factor authentication」 支持安全密钥作为多因素认证方式。 对于开发者来说这尤为关键,因为 GitHub 账户被攻破可能通过向仓库注入恶意代码导致供应链攻击。 Microsoft 账户通过「安全性」→「高级安全选项」→「添加新的登录方式」支持安全密钥。 Twitter/X 为启用了两步验证的账户支持安全密钥。关于认证方式的更广泛概述, 请参阅我们的两步验证指南

丢失或故障时的恢复计划

安全密钥最大的顾虑是「丢了怎么办」。答案很明确:预先注册备份密钥是唯一可靠的对策。在所有主要服务上注册第二个安全密钥,将备份密钥保存在与主密钥物理上不同的位置,如家中的保险箱或银行的保管箱。

除了备份密钥外,打印并安全保管各服务的恢复代码 (备份代码) 也很重要。Google 可以生成 10 个备份代码,GitHub 提供 16 个恢复代码。这些代码是一次性的,在安全密钥不可用时作为紧急访问手段。建议将代码打印在纸上而非数字保存,因为数字保存存在被恶意软件窃取的风险。

也值得考虑将通行密钥作为 补充恢复方式。一些服务允许同时注册硬件安全密钥和存储在智能手机上的通行密钥, 提供额外的后备方案。要了解不同认证技术之间的关系,我们的TOTP 用语集生物认证风险文章 提供了有用的背景知识。

成本效益分析

个人使用的情况下,主密钥和备份密钥的双密钥体制需要约 100 美元的初始投资 (YubiKey 5 NFC × 2)。与账户被盗的损失相比,这个金额非常合理。根据 IPA 的调查,非法访问的平均损失个人约为 2,000 美元,企业则高达数千万日元。安全密钥无需电池且没有活动部件,通常可使用 5 年以上,换算成年成本约为 20 美元。

企业部署的情况下,为 100 名员工每人配发 2 个 YubiKey,初始成本约为 10,000 美元。然而,应对一次钓鱼攻击的成本 (事件调查、系统恢复、客户通知、信誉恢复) 平均达数百万日元,因此仅防止一次攻击就能收回投资。此外,还有减少密码重置带来的 IT 服务台成本。Gartner 的研究估计每次密码重置的 IT 支持成本约为 70 美元,考虑到年度重置次数,安全密钥部署带来的间接成本节约也不容忽视。

想要深入了解认证安全的人,FIDO2 安全密钥相关产品 (Amazon)提供了从入门级到企业级的多种选择。

实施步骤

建议按以下步骤推进安全密钥的导入。

  1. 购买主密钥和备份密钥共 2 个 (USB-C/NFC 型号通用性最高)
  2. 从最重要的账户 (邮箱、云存储) 开始依次注册安全密钥
  3. 在各服务上也注册备份密钥
  4. 打印恢复代码并保存在安全的地方
  5. 将备份密钥保存在物理上不同的位置
  6. 将主密钥挂在钥匙扣上,日常携带

对于尚不支持安全密钥的服务的密码管理,配合密码管理器使用, 并通过 passtsuku.com 为每个服务生成独立的强密码。同时检查多设备密码同步设置, 确保在所有设备上无缝访问。

常见问题

如果丢失了安全密钥,会无法访问账户吗?
如果预先注册了备份密钥,可以用备份密钥登录。如果备份密钥也没有,可以使用各服务的恢复代码 (备份代码) 恢复访问。因此,导入安全密钥时务必注册备份密钥并打印保管恢复代码。
安全密钥可以在智能手机上使用吗?
是的,支持 NFC 的安全密钥 (如 YubiKey 5 NFC) 可以在 iPhone 和 Android 智能手机上使用。iPhone 从 iOS 13.3 开始支持 NFC 安全密钥。Android 支持 NFC 或 USB-C 连接。只需将安全密钥靠近智能手机背面即可完成认证。
通行密钥和安全密钥有什么区别?
两者都基于 FIDO2/WebAuthn 技术,但私钥的存储位置不同。通行密钥将私钥存储在智能手机或 PC 的安全元件中,可以进行云同步。安全密钥将私钥存储在专用硬件设备中,无法被提取。安全密钥的防钓鱼能力更强,但通行密钥的便利性更好。需要最高级别安全性时选择安全密钥,重视日常便利性时选择通行密钥。

相关术语