你真的了解 Yubikey / CanoKey 等硬件安全设备吗?
这些设备常常标榜自己「增强认证安全性」「专为高安全性设计」「唯一被证明可以阻止大规模帐户接管的身份验证技术」
然而在实践中,这些设备的实际效果并不如预期。
绝大多数人使用这类密钥无法实际提升安全性,甚至有可能让安全性更差或将自己锁在系统外面。

物理安全性

在开启长篇大论的分析之前,请先思考一下,如果你的安全密钥丢失,你是否会失去部分或全部的访问权限?
有许多推荐这类安全密钥的文章推崇只将 GPG Key 放进安全密钥中,然后打印一份纸备份,声称这样可以使你的 GPG Key 完全离线,不接触互联网。
不得不承认,这样确实可以让你的 GPG Key 完全离线,但是你也应该考虑:
1. 如果你的安全密钥丢失/坏了,你是否有能力恢复它?
- 你还找得到你的纸备份吗?真的?不会已经在某个垃圾场里被粉碎了吧?
- 纸备份的物理环境适宜吗?会不会进水,进火,进风,进雷?导致纸张上的字难以辨认?
- 你是否使用了计算机可以轻易识别的方式编码(如二维码)?如果只是简单将文本打印出来,恢复的时候会费不少功夫。
2. 大部分人不需要考虑,但假如你是一个高价值目标,纸备份的物理环境是否安全?
3. 大部分人不需要考虑,但假如你是一个高价值目标,当他人捡到你的安全密钥,保护你 GPG Key 的 PIN 码强度是否足够?

你应当定期检查你的这些备份措施是否可靠,是否能再可靠地恢复出数据。

认证模型

许多安全密钥支持 WebAuthn,可以在网站上登录的时候调用安全密钥。
大多数网站一般要求你先添加一个普通的 TOTP,然后才能添加一个安全密钥;也有一些网站可以直接添加安全密钥,作为恢复手段,你可以通过手机,或者一串代码代替安全密钥。
还有一些网站不支持添加多个认证方式,只能添加一个安全密钥,并且没有其他恢复手段,你必须联系客服才有可能恢复你的账户,或者干脆就没有机会了。
这些安全密钥鼓吹的一大点就是电脑被黑也能保持安全性,因为黑客不能在电脑上帮你触摸安全密钥(许多安全密钥要求用户用手实体触摸一下才能通过验证)。
让我猜一猜,你有没有把恢复代码塞进一个 txt 放在电脑的哪个文件夹里或者桌面上?再或者是密码管理器里,但是密码管理器已经解锁了?

在使用安全密钥时,应当充分了解安全密钥丢失时认证的替代方案及替代方案的安全性,如果你被说中了,那么安全密钥实际上无法提供任何额外的安全性。
不仅如此,你也应当考虑在丢失安全密钥或者安全密钥损坏的情况下,你会不会被锁在系统外,稳妥的方案是定期将这些网站的恢复过程走一遍。
比如,我 AWS 账户的 MFA 就是 Yubikey,恢复的时候需要 邮箱验证 + 电话验证,你也应该试一试你接不接的到这通国际电话,你的邮箱是否也用了安全密钥认证,否则被锁在系统外的就是你而不是黑客了。

画外音:还有一些用户热衷于使用密码管理器自带的 TOTP 功能,比如 1Password 就有相关支持,可以将 TOTP 放在密码管理器里,登录时密码管理器可以直接生成数字。
听起来很美好,不需要买硬件也不需要用手机就 "2FA" 了。
然而仔细思考一下,如果都需要用到 2FA 了,说明你的账号密码已经泄漏了,然而使用密码管理器每个网站的密码都是随机的,因此不存在撞库,排除有人解密了你 HTTPS 流量获取密码之类的成本极高难度极高的攻击,最有可能的是你的电脑已经被黑或者你的密码管理器已经整个泄漏。
在这种情况下,密码管理器保存的 TOTP 是毫无意义的,2FA 是 Two-Factor,然而在密码管理器里同时存了账号密码 TOTP 的这种行为只能算是 1 个 Factor,它并没有在实际上增强你的帐号安全性。
就好比如果你用「Aa123456.」「abc123」这类上榜弱密码排行榜的密码,虽然这些密码也包含了数字字母甚至符号,网站的密码框也会告诉你你的密码强度超强,但还是没法改变你的密码和 123456 安全性无异的事实。
使用这些认证方式前应自己独立思考这样是否真的能提高安全性,而不能看一眼什么安全性排行榜或者软件硬件官网就直接信了,不同场景下的不同使用方式毫无参考意义,无法类比,一个认证方式的安全性不是能用一个分数就能直接定义的。

硬件安全性

你的硬件足够安全吗?
将 Key 灌进硬件,相当于你已经无条件的信任了这个安全密钥。
先来看几条新闻:
- 攻击者通过对嵌入在密钥中的芯片实施电磁侧信道攻击,提取 Yubikey 或 Google Titan Key 的加密密钥,完全破坏2FA的保护
- Yubico 指出,这个漏洞出造成硬件每次启动后,其第一组随机值的随机性降低,导致安全性变低
- Ledger 硬件钱包存在漏洞,通过 MITM 可篡改钱包地址
- Thomas Roth 通过捕获 Ledger 无线电波,并分析与输入的 PIN 码可能相关的信号。解码成功率高达90%以上
- 研究人员利用了一个在2017年被发现且已经由供应商修复的漏洞。研究人员发现,攻击者可以利用这个漏洞从钱包的随机存取存储器(RAM)中窃取私钥和PIN码,如此一来就可以接管钱包

如果你购买的硬件不够可靠,那么有可能会导致更严重的后果。
有些安全密钥声称自己是开源的,比如 CanoKey,但是仔细了解一下你会发现 CanoKey 目前公开发售的版本并非 100% 开源,部分功能因故无法开源。(签了保密协议之类的。官方声称)
而且,开源不代表安全,开源并不代表有专业的人士审计过这段代码。
而且实际上你也没有办法判断你到手的 Key 里面烧的固件到底是不是开源代码的版本,所以开源通常不能被列为你选择安全密钥的因素。

尾声

作为一个整天混迹币圈的人,我也经常看到有文章推荐硬件钱包,一通吹猛如虎无非是说自己有多安全,同样的问题,你的助记词是怎么保存的呢?你是否又信任你当前的计算机安全性呢?
每个人的情况各不相同,没法一概而论说这种方式是否适合某一个场景。
无脑相信别人推荐某种认证方式在大多数情况下无法增加安全性而且很有可能会把自己锁在系统外。
以我自己而言,我依然在用普通的软件钱包,因为我不认为「我的电脑会被黑 && 被黑的时候我的钱包是解锁状态 && 看到黑客在操作我来不及拔网线」这种情况会发生。
其实有些时候你也要考虑自己的价值,我并非在宣传无所隐瞒论,只是在配置认证措施的时候,你需要考虑你要防止的是哪种攻击,是你妈砸电脑的攻击,是类似棱镜的大规模监控项目,是专业的定向黑客攻击,还是在你身边的物理攻击?
防御不同的攻击有不同的方法,瞎配没法真正提高你的安全性,还会让你徒增许多不必要的维护、使用的时间成本与硬件的金钱成本。

在这个信息爆炸的时代,独立思考也是一份难能可贵的能力,不要人云亦云,用不必要的开支给自己增加不必要的烦恼,最后把自己锁在系统外求客服却没法证明「我是我自己」。
如果你的登陆很便捷,在你自己思考安全性与利弊后,也请心安理得地使用下去吧。登陆的便捷是科技的发展带来的福利,并非要像网银一样「装着比你权限还高的控件,用着老的不能早老的 IE 浏览器,插着不能再蛋疼的 U 盾,反复输入一次又一次一种又一种密码」才能叫安全。
我经常能看到一些说支付宝微信不安全的文章,声称「小钱微信大钱支付宝存款还得看银行」。
这话我一时间竟不知如何反驳,微信支付需要先登录微信账号使用,微信账号经常连用户本人都登不上去,换设备登陆后还需要支付密码才能开启付款码,而且风控明显比支付宝严格多了,怎么就有这种说法了。
而且微信支付宝的安全性怎么还就比不上银行了,这两个科技巨头打造的产品风控比银行断卡行动前约等于0和断卡行动后宁可错杀一千不可放过一个都风控准确太多了好吧。
而且实际上微信支付宝的余额比银行存款安全性还要高,微信支付宝属于支付工具,按照人民银行要求其余额必须 100% 交由人民银行备付,哪怕支付宝微信倒闭了余额也不受影响。而银行存款属于一般性存款,只有一定比例(10%左右,随政策调整)交由人民银行备付,其余银行自行投资,存款保险只保障50万元以内的范围。
当然,实际上支付工具余额和银行存款安全性是差不了多少的,大银行倒闭不了,小银行即使倒闭,个人的存款基本都是 100% 兑付,我只是想举例说明要有独立思考的能力,支付工具的余额安全性比银行的一般性存款还要高,这是反直觉的,但却也是事实。

利益相关:已购 CanoKey、Yubikey,都在使用当中。支付宝用户,微信支付用户,微信支付只放了几千块。
最后再澄清一下,我写这篇文章只是不是说 Yubikey 没卵用是个骗钱产品,我个人也在使用 Yubikey,只是你应当思考一下要在哪些场景使用,其效果和成本与恢复难度你是否能接受/是否值得。