什么是 passkey Passkey 的官方中文翻译是「通行密钥」,这实在不是个好的翻译。本来推广 passkey 的几大公司起这个名字,是和 password 相对应,password 是「用于通行的口令」,那么 passkey 就是「用于通行的钥匙」,简单好记。但 password 的中文已经约定俗成翻译为「密码」,「密钥」又另有所指,不得不起了这么一个蹩脚的翻译。四字短语永远会在广泛使用后有一个两字的缩写,不知道假以时日,会不会有人用「通钥」来简称 passkey。不过以今日中文网站对 passkey 的冷漠,这一天即使有大概也很遥远。 言归正传。天下人苦密码久矣。这些年有些时兴的 passkey 是又一波试图「消灭」密码的浪潮。 所有人都痛恨用户名-密码验证:总是记不住用户名、密码,试错几次锁帐户……每个月总有几次这样的时候让人想摔电脑。如果还有双因素认证,输完密码还要再输个验证码,人就更暴躁了。什么时候才能让这种证明「我是我」的过程不那么痛苦。 前些年国内网站在逐渐使用短信验证码来替换密码登录,可短信这个东西,仅作为一个验证手段都嫌不安全,作为唯一的登录凭据使用,简直是把脑袋挂在手机上。它成为中国主流的验证方式也是「自有实名制国情在此」。相对而言,公钥私钥验证,在密码学上早已成熟,在实际应用中久经考验,几十年来都被人认为是取代密码的最佳方案之一。在 SSH、PGP、PIV 卡等应用上,公钥认证已经广泛使用很多年。但是在网站登录上,由于易用性的原因,尽管已经有很多免密码登录的业界标准,却一直没有推广开来。 2022 年,Microsoft Google Apple 三大操作系统提供商,以及 Chrome Firefox 浏览器终于开始一致行动,推广免密码登录。虽然本质上是新瓶装旧酒,底层方案仍然是久已有之的东西,但一个好名字显然有助于推广,这个新名字就是 passkey。这之后,支持 passkey 登录的网站慢慢多起来。 Passkey 的目标不仅是取代密码,还要取代传统的两步验证(2FA)。对于两步验证,或者多因素验证来说,登入帐户需要两个凭证,一件是「用户知道的」,比如说密码,一件是「用户持有的」,比如说硬件密钥或者手机。如果有人偷了用户持有的东西,但是不知道密码,自然无法访问。如果有人偷窥到了密码,或者恶意软件记录了密码,只要没有把第二凭证拿到手,还是无法登入。Passkey 既然要取代两步验证,安全性自不能降低,还是要证明用户已经出示了两种凭证。 打个比方来说明一下什么是 passkey :一个网站或者其它需要验证身份的服务(relying party)(RP)要求用户出示某种凭证来证明身份: 军营前方,一骑快马奔来,军营守卫大喊「来者何人!」。如果用密码的话,来使在马上大喊「天王盖地虎!」守卫回去一看,好像确系皇帝所约定的暗语,于是放行。没想到使者见将军之后一剑刺死将军,大笑三声:「你们天天都是同一个口令,早就被我们密探听得一清二楚!」 如果使用 passkey 的话,只见来使从背后抱出一个沉重的密码箱,左拧右拧,露出一半虎符,将军让守卫传上来,和自己的那半虎符一对,严丝合缝,「果然是真使者!」 虎符只是个比方,实际使用的是更为安全的公钥私钥认证。在前述比喻中,实际发生的是:用户使用 PIN 或者指纹、面容解锁 passkey 设备(也就是上面比喻中的密码箱)之后,passkey 设备使用密码学上的公钥认证向 RP 发出证明:「兹证明,某用户在我这台设备上使用 PIN 解锁成功(既然您对我这款设备熟,您应该知道我只有在用户物理上持有我这台设备的时候才会发出证明,那个啥,第二因素认证就一并免了吧?)」。于是 …