Matrix 精选
Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。
文章代表作者个人观点,少数派仅对标题和排版略作修改。
前段时间,我在 TuTu 生活志 的 视频中 ,看到了 Titan Security Key,并对这款来自 Google 的硬件安全密钥产生了兴趣。
在购买和使用了一个多月后,通过本文,我来简单谈一谈我的使用感受。
关于硬件安全密钥
什么是硬件安全密钥
硬件安全密钥将认证信息存储在独立硬件上,用于代替密码,或者提供一种 双因素验证 机制。
如果用户开启了基于硬件安全密钥的双因素验证,输入密码后,必须连接密钥再次确认,才能正常登录。这种机制为账号提供了额外的一层保护。
硬件安全密钥一般基于 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 的「亲儿子」,Titan Security Key 在 Google 账号中,能显示专属的图标,方便区分不同的密钥:
对于 G Suite 企业版账号,管理员还可以设置更加灵活的安全策略,例如允许或禁止特定的第三方应用(例如 Spark 邮件客户端 )访问 Gmail。(当然,这样做也会一定程度上削弱 Google 账号的安全性。)
移动设备兼容性
对于不少人来说,手机、平板等移动设备,已经成为生活中必不可少的一部分。所以,是否能够方便地在移动设备上使用,也是选择硬件安全密钥的一个重要考虑因素。
Google 自家的 Android,对 Titan Security Key 的支持也是最为全面的。对于 USB、蓝牙、NFC 三种协议,Android 都能提供完整的支持。
从 2019 年开始,Apple 也开始在 macOS、iOS、iPadOS 上逐步支持硬件安全密钥:
对于 iPhone,除了使用 闪电转 USB 相机转换器 等配件,也可以直接使用 NFC 无线连接。当然,对于 iPad Pro,使用 USB-C 接口连接也是比较方便的。
用户也可以在 iPhone 和 iPad 上,通过蓝牙方式连接 Titan Security Key,但必须通过 Google Smart Lock App 连接,且只能登录 Google 账号,不支持第三方网站。
顺便提一下,在刚刚结束的 WWDC20 上,Apple 还为 Safari 带来了基于 WebAuthn API 的 Face ID/Touch ID 认证功能。对于没有硬件安全密钥的用户,今后也可以通过指纹或人脸识别,实现更方便的双因素验证了。
在第三方服务中使用:1Password、Dropbox 等
由于 FIDO 和 WebAuthn 是一套开放的标准,目前已经有不少的互联网服务,支持通过硬件安全密钥进行双因素验证。
通过如下链接,可以了解到各个互联网服务对双因素验证的支持情况:
经过测试,大部分网站都能完美兼容 Titan Security Key,包括 WordPress.com、Dropbox、Twitter 等:
常用密码管理器的网页版,例如 1Password 和 Bitwarden,也能通过 Titan Security Key 进行双因素验证:
在我的测试中,只有 Microsoft 账号(OneDrive、Office 365、Outlook 等)不兼容 Titan Security Key。
Microsoft 账号利用硬件安全密钥的方式,与其他网站不太一样:直接利用硬件安全密钥进行免密码登录,而不是双因素验证。与此同时,Microsoft 也对硬件安全密钥提出了更多的要求,例如需要支持 FIDO2 标准等:
- Azure Active Directory 无密码登录(预览版) | Microsoft Docs
- Microsoft-compatible security key – Microsoft 365 Security | Microsoft Docs
而 Titan Security Key 不支持 FIDO2,所以也就无法用于登录 Microsoft 账号了:
同时,大部分客户端软件,例如 macOS 版本的 1Password,以及 Dropbox 的 iOS App,都不支持硬件安全密钥。开源的 KeePass 密码管理器,也没有支持 Titan Security Key 的插件:
高级玩法
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:
这是因为 Windows Hello 和 Microsoft 账户一样,也必须使用符合要求的 FIDO2 密钥,才能正常登录。具体请参考前文中关于 Microsoft 账户的内容。
Linux 与 macOS 登录
在 Linux 上设置 Titan Security Key,步骤会稍微麻烦一点:需要安装 libpam-u2f
,并修改配置文件。具体配置方法请参考如下文章:
经测试,Titan Security Key 能够完美地在 Ubuntu 20.04 LTS 上运行。无论是首次登录,还是使用 sudo
命令,都能正常兼容。
macOS 也可以通过 Titan Security Key 进行双因素验证,设置步骤和 Linux 大同小异:
但是,对于启用了 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 等功能
- 拥有更丰富的生态。例如 KeePass 密码管理器有 KeeChallenge 插件,安装后即可支持 Yubikey
所以,在选购硬件安全密钥时,如果仅仅是为了使用 Google 高级保护计划,来自 Google 的 Titan Security Key 是最合适的选择;但如果想将密钥用在更多不同的场景中,功能丰富的 YubiKey 5 更值得购买。
推荐阅读 The Verge 的这篇文章。作者通过对比市面上常见的硬件安全密钥,给出了详细的购买建议:
- 本文同时发布在我的博客,欢迎关注:https://blanboom.org/2020/titan/
> 下载少数派 客户端 、关注 少数派公众号 ,了解更妙的数字生活 🍃
> 想申请成为少数派作者?冲!