你知道吗,许多数据泄露事件(大多数?)都源自被盗凭证?
没错,如果你所有的私人信息(连同你家人的)一年被盗并泄露 20 次,那是因为企业和政府机构的员工根本管不好自己的密码,没法把它们保密。
实际上,你的密码(还有我的)可能早就已经被攻破了,而我们甚至都不知道。
放心,这不是他们(也不是你,或我)的错;要把密码保得绝对安全,本来就很难。基于密码的身份验证就是很糟糕。
我已经尽力列举了凭证被盗的最常见方式,但攻破密码的方法实在太多了,我无法保证没有漏掉这样那样的一种。

密码最大的问题,可能就是它们很容易遭受钓鱼攻击。毫无防备的用户只要在一个由犯罪分子搭建的 www-mybank.com 上输入自己 mybank.com 的凭证,就会中招。你也许会觉得自己足够聪明,不会被钓鱼邮件骗到,但你的奶奶呢?或者某家电信公司的员工呢?在密码被彻底淘汰之前,钓鱼攻击就会一直奏效,因为我们都会有注意力不集中的糟糕日子;而且攻击者开发新技术、新策略的速度,比我们适应的速度还要快。
接下来就是恶意软件。你可能已经知道键盘记录器,这类恶意软件会记录你在键盘上输入的内容,是盗取密码的一种简单方式。但你知道吗,早在 10 多年前,恶意软件就已经常见于注入进程和库中,并劫持加密和网络相关函数,从而在数据加密、上网发送之前就拦截流量?
通过直接向你的网页浏览器和其他敏感应用注入代码,恶意软件随后就可以筛选并记录外发流量,例如包含“email”或“password”等关键词的内容。
然后就是中间人拦截。虽然现在几乎所有互联网流量都已经使用 TLS 加密,但我们对整个互联网安全的依赖其实远比我们愿意承认的要脆弱得多,而且还依赖一些相当不透明的组织——证书颁发机构(Certificate Authorities)。这些机构有权签发恶意证书(无论是由于政府机构的要求,还是因为遭到黑客入侵),随后这些证书就可以被用来拦截你设备与所用服务服务器之间线路上的流量。
过去这种情况在客户端上远没有恶意软件那样常见,但如今,直接感染服务器的趋势正越来越明显。一旦恶意软件被安装到服务器上,就可以劫持进程和库,在数据从网络中解密后访问敏感数据。
最后,还有数据库泄露。无论是因为数据库(或 S3 存储桶)直接暴露在公共互联网,还是因为老套的 SQL 注入,总会有这样那样的公司在某一周不得不承认:他们所有用户的数据如今都已经在暗网上出售了。
这一切催生了一个“繁荣”的黑市,犯罪分子和(当然也包括)一些机构在其中买卖被盗凭证。想为世界上大多数大型公司和政府机构买到被盗凭证并不难,而这些凭证可以被用来渗透网络、外传数据。
我希望到现在你已经相信,密码就是糟糕的,而且显然是保护我们日益数字化生活的非常差的方式。
如果我们可以拥有一种既“足够安全”又无需通过网络传输的身份验证机制,会怎样?
请欢迎签名!

签名允许持有私钥的人对消息进行身份验证。通过对消息签名,私钥所有者证明该消息的有效性。随后,任何持有公钥的人都可以验证该签名是否与消息匹配。
你可以在我的文章 签名:现代端到端加密的基础 以及我的书 Black Hat Rust 中了解更多关于签名的内容。
通行密钥就是这样:私钥存储在你的设备上,公钥存储在服务器上。
通行密钥是一个营销术语,指的是 Web Authentication(WebAuthn) 凭证。
通行密钥可以是基于软件的,并在你的设备之间同步(例如密码管理器);也可以是基于硬件的,并绑定到某一特定设备(例如硬件安全密钥)。
从概念上说,它非常简单:当你注册某项服务时,会生成一对私钥和公钥。
私钥存储在你的通行密钥管理器中(例如 Bitwarden),公钥存储在该服务的数据库里。

随后,在登录时,服务器会发送一个随机生成的挑战值,你的设备用私钥对其签名,服务器再验证该挑战的签名是否与公钥匹配。

由于私钥从不通过网络传输,而且还绑定到某个域名(例如 my-bank.com),因此通行密钥具备防钓鱼能力。
你可以在 webauthn.io 上查看 WebAuthn 和通行密钥的演示。
你也可以在 web.dev 的通行密钥注册教程 中查看用于生成凭证和签署挑战的代码片段。
你在想最棒的是什么?假设你在度假时丢光了一切,只剩手机和钱包,而且你度假期间家里还着火了。WebAuthn 我最喜欢的一个使用场景就是:你可以在任何不安全的电脑上(比如邻居家的,或者公共图书馆的电脑)登录你的在线账户,只需扫描二维码或插入硬件安全密钥,就不会有凭证泄露的风险(别忘了注销)。

很棒吧?
WebAuthn 标准相当庞大,涵盖了许多我在这里无法逐一展开的用例;不过你可以看看 Adam Langley 的 WebAuthn 导览 以及 Mozilla 关于 Web Authentication API 的页面,以了解更多。
是的,通行密钥会强迫人们使用密码管理器。
但这其实是好事!你本来就应该使用密码管理器,并且为每个网站使用唯一密码,那么为什么不在此基础上再加上防钓鱼和防破解能力呢?
你完全不必使用大型科技公司提供的通行密钥管理器,也可以使用第三方方案;这些方案实际上更安全、更有韧性,因为它们不会因为某些荒唐原因就把你的账户一刀切掉,而且不给你任何申诉余地。
那为什么大型科技公司如此大力推动通行密钥?很简单,因为你根本无法想象他们每天遭受多少攻击,而通行密钥可以化解其中大多数攻击。他们也有切实的动机来降低自身责任风险。
既是,也不是!
双因素认证(2FA)在很大程度上一直是密码之上的“应急补丁”,因为密码太容易被盗了。
不过,通行密钥并非无懈可击,仍然可能被窃取(尽管比密码难得多),例如通过入侵你的通行密钥管理器(恶意软件,或钓鱼你的主密码)。因此,重视安全的组织仍然会希望部署 2FA。
我认为,基于软件的通行密钥管理器 + 用于 2FA 的硬件安全密钥,这两者都具备防钓鱼能力,能够同时为数字攻击和物理攻击提供最佳防护。
既是,也不是!
如你所知,量子计算机会因为 Shor 算法 而威胁当前的非对称密码学。我们把能够破解非对称密码学的量子计算机称为“密码学相关量子计算机”(Cryptographically Relevant Quantum Computers,CRQCs)。幸运的是,我们离至少造出一台 CRQC 还很远,因为量子计算机很难实际构建,尤其受稳定性和纠错问题限制。
但这只是时间问题。
正如 Daniel J. Bernstein 所说:有必要区分对以下三件事时间线的预测:
攻击者实施量子攻击[针对密码学]。
量子攻击的公开演示。
量子计算机真正对公众有用,而不仅仅用于攻击。
许多专家和机构 预测,CRQC 可能会在 2030/2040 年前后出现。
因此,如今生成的通行密钥会在未来面临量子计算机的威胁;但在 2024 年 8 月,NIST 已发布用于后量子数字签名的 FIPS 204 标准:ML-DSA。
因此,FIDO 联盟和 W3C 迟早会为 WebAuthn 发布一种抗量子攻击的签名方案,而我预计通行密钥管理器和服务提供商会对受量子威胁的通行密钥显示醒目的警告,提醒你及时轮换。相比每 6 个月更换一次密码,这种情况已经好得多了。
对于硬件安全密钥而言,过渡成本会更高一些、速度也会更慢一些。
和密码一样:服务应当提供一种方式来恢复你的账户。
你的通行密钥管理器应该是你数字生活的安全核心:你有责任提前规划好恢复方案,以防你的设备被盗/被毁,而你又远离家乡。
这一点在现在也同样适用,因为你本来就应该使用密码管理器,并为每个网站设置你自己记不住的长密码。
证明声明是一种让服务器验证某个通行密钥属于特定品牌和/或型号的方法。
几乎所有硬件安全密钥出厂时都带有一个硬编码的证明声明私钥,它可以用来对其他生成的公钥签名,并确保它们来自“安全硬件”(例如,来自某个特定品牌)。
我在这篇文章里没有展开这一点,因为它相当高级,而且我认为它不会在企业部署之外被广泛使用。
你可以在这里了解更多,以及如何实现它。
强密码可以被派生为用于端到端加密的安全密钥。例如,这就是所有密码管理器底层的工作方式。
而且我有个好消息!WebAuthn 通过 PRF 扩展 为我们提供了支持,依赖方可以用它获取隔离的对称加密密钥。基于此,应用程序可以构建密钥层级,或自行搭建任何他们想要的、稳健的加密系统,让只有持有通行密钥的客户端能够访问加密密钥。
我推荐按这个顺序使用 -8(Ed25519)和 -7(ES256 / ECDSA),它们都符合 FIPS 标准。
像较旧版本的 Windows Hello 这样的遗留实现只支持 RSA,也就是 -257(RS256)。不要使用 RSA。对于旧设备,提供一种替代认证方式,例如魔法链接/一次性验证码,比削弱你的通行密钥实现更好。
是的!
用户获得了更好的体验和更安全的在线账户。
服务提供方则在用户数据库被外泄的情况下,能更好地防御钓鱼,并为用户提供更高的安全性。
这就是那个价值百万美元的问题!
在这里,我建议采取激进做法,因为,嗯,像许多服务现在那样让密码和通行密钥共存,完全违背了通行密钥的初衷,因为用户依然处于脆弱状态。
把数据库里的密码删除掉;当用户在没有通行密钥的情况下登录时,通过电子邮件向其发送魔法链接/一次性验证码,然后向他们展示一个页面,鼓励他们注册通行密钥。
长期关注本博客的读者可能知道,我常常对那些被宣称为“某行业未来”的事物保持怀疑,但通行密钥的情况不同:我 1000% 支持。
你不可能一边支持密码管理器,一边反对通行密钥。通行密钥只是密码管理器的自然演进,并内置了强密码学和防钓鱼能力。
基于密码的身份验证就是一坨烂东西,也是太多黑客攻击和数据泄露的根源。如果什么都不做,这个趋势必然只会加速。你我都不想每个月都被不同的黑客组织盗走数据,只因为某家公司里一个忙得焦头烂额的员工,在一个你甚至都不记得自己有账户的平台上,接了一个由 GPT-25 拨出的钓鱼电话就上当了。
通行密钥不仅对安全有巨大提升,对用户体验也同样如此(因此也有利于你的利润);它们不是安全的未来,而是现在。
你还在等什么?