关于硬件安全密钥
什么是硬件安全密钥
硬件安全密钥将认证信息存储在独立硬件上,用于代替密码,或者提供一种双因素验证机制。 如果用户开启了基于硬件安全密钥的双因素验证,输入密码后,必须连接密钥再次确认,才能正常登录。这种机制为账号提供了额外的一层保护。 硬件安全密钥一般基于 FIDO 协议,网站可使用 WebAuthn API 访问密钥。FIDO 和 WebAuthn 均为开放的标准:
本文介绍的 Titan Security Key,并不是唯一一个硬件安全密钥。在它出现之前,YubiKey 已经受到了不少人的欢迎。另外,我们常用的银行 U 盾,也属于硬件安全密钥的一种(只不过使用了私有协议)。 越来越多的厂商和组织已经开始支持硬件安全密钥,包括 Google、Apple、阿里巴巴、华为等。
为什么需要硬件安全密钥?
目前已经有不少网站支持了双因素验证,在输入密码之后,还需要输入一个六位动态验证码。 验证码一般可以通过两种方式获取:通过短信接收,或者通过 Google 身份验证器等 App 获取(基于 RFC 6238 TOTP)。这两种方式在安全性上,都有一定的欠缺。 对于短信,手机上的 GSM 协议是一个「古老」的协议,通信内容比较容易被监听。此外,手机或 SIM 卡丢失,也会让其他人随意获取验证码:
对于基于 TOTP 的双因素验证,安全性相比短信有较大提升。但与硬件安全密钥相比,仍存在一些安全弱点:
- OTP vs. U2F: Strong To Stronger | Yubico
- Why You Should Never Use Google Authenticator Again
- Google Online Security Blog: New research: How effective is basic account hygiene at preventing hijacking
另外,攻击者还可以通过网络钓鱼、社会工程学等方式,获取临时验证码。而硬件安全密钥较难被其他人物理接触,一定程度上减轻了这些问题。
密钥忘带、丢失怎么办?
对于密钥忘带、丢失等情况,可通过准备两个或多个安全密钥的形式解决:
- 一个挂在钥匙扣上,和钥匙一起随身携带
- 另一个做为备份密钥,放在家中或异地保存
大多数网站都支持添加多个硬件安全密钥。下文中介绍的 Google 高级保护计划,还会强制要求用户添加至少两个硬件密钥。
关于 Titan Security Key
Titan Security Key 是来自 Google 的硬件安全密钥,由飞天诚信和 Yubico 代工。 根据接口和协议的不同,这款安全密钥分为三个版本:
- 蓝牙/NFC/USB 版本
- USB-A/NFC 版本
- USB-C 版本
此外,Google 还提供了蓝牙/NFC/USB
和 USB-A/NFC
打包的版本,一次购买即可同时拥有主备两个密钥。我购买的就是这个版本:
Google 高级保护计划
Google 高级保护计划为用户账号提供了更强大的安全保护措施:
为 Google 账号开启高级保护计划后,能够获得如下方面的安全性增强:
- 登录 Google 账号时,必须使用硬件安全密钥进行双因素验证,原有的双因素验证(手机验证码、TOTP 动态验证码等)全部失效,无法继续使用
- 禁止第三方应用访问 Gmail 或 Google Drive(Apple Mail、Thunderbird 等常用邮件客户端除外)
- 在 Android 设备上,禁止安装 Google Play 之外的应用
- 如果密钥丢失或忘记密码,恢复账号需要额外的验证步骤
当然,这些安全性的提升,也会带来便利性和灵活性的降低。是否要打开 Google 高级保护计划,就要看个人取舍了。 为了避免密钥丢失导致账号无法访问,Google 要求用户至少准备两个硬件安全密钥。所以,两个打包的 Titan Security Key 套装,就成了最适合 Google 高级保护计划的硬件。
移动设备兼容性
对于不少人来说,手机、平板等移动设备,已经成为生活中必不可少的一部分。所以,是否能够方便地在移动设备上使用,也是选择硬件安全密钥的一个重要考虑因素。 Google 自家的 Android,对 Titan Security Key 的支持也是最为全面的。对于 USB、蓝牙、NFC 三种协议,Android 都能提供完整的支持。
在第三方服务中使用:1Password、Dropbox 等
由于 FIDO 和 WebAuthn 是一套开放的标准,目前已经有不少的互联网服务,支持通过硬件安全密钥进行双因素验证。
通过如下链接,可以了解到各个互联网服务对双因素验证的支持情况:
- Azure Active Directory 无密码登录(预览版) | Microsoft Docs
- Microsoft-compatible security key – Microsoft 365 Security | Microsoft Docs
而 Titan Security Key 不支持 FIDO2,所以也就无法用于登录 Microsoft 账号了:
高级玩法
SSH
OpenSSH 8.2 带来了 FIDO/U2F 支持,可选择 ecdsa-sk
或 ed25519-sk
两种密钥类型,实现双因素验证。Titan Security Key 只支持 ecdsa-sk
。
对于 macOS,可通过 Homebrew 安装最新版的 OpenSSH(brew install openssh
)。 安装新版 OpenSSH 后,使用 ssh-keygen -t ecdsa-sk
生成密钥对,并上传到服务器上,即可实现双因素验证。后续登录服务器时,必须连接硬件安全密钥,才能正常登录。
# 生成密钥对
$ ssh-keygen -t ecdsa-sk -f ./id_ecdsa_sk
Generating public/private ecdsa-sk key pair.
You may need to touch your authenticator to authorize key generation.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in ./id_ecdsa_sk
Your public key has been saved in ./id_ecdsa_sk.pub
# 登录服务器,必须连接硬件安全密钥,才能正常登录
$ ssh -i ./id_ecdsa_sk blanboom@172.16.15.12
Confirm user presence for key ECDSA-SK SHA256:XXX
Welcome to Ubuntu 20.04 LTS (GNU/Linux 5.4.0-33-generic x86_64)
blanboom@blanboom-ubuntuvm:~$
Windows Hello
在 2019 年,Windows Hello 也开始支持硬件安全密钥。但实测不兼容 Titan Security Key:
Linux 与 macOS 登录
在 Linux 上设置 Titan Security Key,步骤会稍微麻烦一点:需要安装 libpam-u2f
,并修改配置文件。具体配置方法请参考如下文章:
经测试,Titan Security Key 能够完美地在 Ubuntu 20.04 LTS 上运行。无论是首次登录,还是使用 sudo
命令,都能正常兼容。
但是,对于启用了 FileVault 全盘加密的 Mac,开机首次登录时并没有真正进入 macOS,所以不方便使用 Titan Security Key。(一种变通的解决方法,是先对硬盘进行加密,设置一个独立的加密密码,再安装 macOS。但开机时需要多输入一次硬盘加密密码。)
购买建议
目前,YubiKey 是市面上最流行的硬件安全密钥。那么,在 YubiKey 和 Titan Security Key 之间,我们应该如何挑选最适合自己的硬件安全密钥? 先来看下 Titan Security Key 的优点:
- 来自 Google,内置由 Google 设计的固件(不过闭源固件对一部分人来说并不是优点)
- 部分型号支持蓝牙,可通过蓝牙连接移动设备(但在 iOS 上仅能通过 Google Smart Lock App 登录 Google 服务,不支持登录第三方服务)
- 提供两个密钥打包的套装,只需要购买一份套装,就可以方便地开启 Google 高级保护计划
- 在 Google 账号中添加 Titan Security Key,能够为不同型号的密钥显示不同的图标
而 YubiKey 5 系列 的特色如下:
- 具有更丰富的型号。其中,YubiKey 5Ci 拥有 USB-C 和 Lightning 双接口,同时兼容 iPhone、iPad,以及新款的电脑和 Android 设备,无需转接
- 支持最新的 FIDO2 标准
- 能够模拟键盘,自动输入密码或 TOTP 动态验证码。即使网站不支持硬件安全密钥,也能通过 YubiKey 登录
- 支持 PGP Smartcard,配合 GPG 能实现更多功能
- 拥有更丰富的生态。例如 KeePass 密码管理器有 KeeChallenge 插件,安装后即可支持 Yubikey
所以,在选购硬件安全密钥时,如果仅仅是为了使用 Google 高级保护计划,来自 Google 的 Titan Security Key 是最合适的选择;但如果想将密钥用在更多不同的场景中,功能丰富的 YubiKey 5 更值得购买。 推荐阅读 The Verge 的这篇文章。作者通过对比市面上常见的硬件安全密钥,给出了详细的购买建议:
还可以参考阅读一下这一篇关于硬件安全密钥的文章。感谢少数派用户炮姐家的蓄电池的推荐:
留言