密码这套设计,其实从一开始就是权宜之计。1960年代初,麻省理工学院的工程师为了让多人共用一台主机、又各自保留档案,就让每个使用者设一组字串作识别。这是密码登场的原点。当时的世界没几台电脑,密码只是工程师之间的小聪明。谁也没料到,半个世纪后,每个普通人手上会握着几十组密码,而且每组都被要求大小写加数字加符号,每三个月还要换一次。
人们讨厌密码,不是因为它复杂,而是因为它充满矛盾。安全要求长、乱、不重复;记忆要求短、顺、能联想 —— 两个方向背道而驰,硬塞在同一个输入栏里。更麻烦的是,各个系统各有一套规矩:银行要求至少十二个字元、必须含特殊符号;公司内网偏偏禁止使用某些符号;旧系统可能限制在八个字元以内,连空格都不许。有的网站每九十日强迫换一次,新密码还不能跟过去十组重复。光是替一个帐户想出合规又好记的新组合,已经是一次小型脑力消耗。
要用一组密码走天下,几乎不可能 —— 各个系统的规则根本互不相容,你想偷懒,系统也不允许。退一步说,就算规则一致,重用同一组密码也是坏主意:任何一个服务被攻破,骇客就会拿那组字串去试你所有其他帐户,一次泄漏可以连锁引爆十几个服务。可是要记住几十组各不相同、又要符合各自怪规矩的字串,普通人根本做不到。于是「忘记密码」变成日常 —— 不停按重设按钮,不停收验证信,不停在便利贴上涂涂改改。人类记忆的极限与现代验证系统的要求之间,本来就存在一道无法跨越的鸿沟。
为了解决这个矛盾,密码管理器(password manager)出现了。它替使用者生成、储存、自动填入,看似把问题解决了一半。但这一半本身又埋下另一重风险:所有鸡蛋放进同一个篮子。LastPass、1Password这类云端同步产品方便,代价是要把整个加密保险库交给服务商;KeePass这类纯本地产品风险较分散,却得自己处理跨装置同步,普及度因此一直不高。2022年下半年LastPass的大规模泄漏事件,正是云端集中模型的反面教材 —— 主密码或加密库一旦被攻破,使用者的一切就同时暴露。把信任集中在一处,本来就不是安全,而是换了一个更大的赌注。
于是有人提倡密语句(passphrase)。用一串容易记忆的词代替乱码,例如四五个英文字串成一句,理论上更长、更难破解,又比乱码好记。但密语句没有真正流行,原因不在使用者,而在系统。许多网站把密码栏限制在十几个字符以内,连空格都不允许。更根本的问题是,密语句本质上仍是一组「共享秘密」 —— 你知道,伺服器也知道。只要那串字曾经离开过你的脑袋,被传送、被储存、被快取,它就有机会被偷走。
社交登入(social login)走了另一条路。把验证的工作交给谷歌、脸书、苹果这些大平台,使用者按一个键就完事。方便确实是方便,代价却是把自己的身分和行为轨迹一并交出去。每登入一次,平台就多掌握一份你在哪里、用甚么、做甚么的资料。这是一种以隐私换取便利的交易,多数使用者并不真正清楚自己付出了甚么。
社交登入还有一个被低估的麻烦。许多人注册时随手按了Google,几个月后忘了,又用Facebook再注册一次,结果在同一个服务里有两个独立帐户,购物纪录、订阅、积分全部分散。网站后台则要决定:把这两个帐户合并、连结,还是当成不同的人?每一种处理方式都有副作用,工程师为此写的判断逻辑往往比验证本身更复杂。便利的表面之下,是一条条打结的数据线。
问题的根,其实一直没被触及 —— 共享秘密这个模型本身。只要使用者和伺服器要共享一段字串,这段字串就有机会被钓鱼、被拦截、被泄漏。要真正解决,就得换一个模型。
这就是通行密钥(passkey)做的事。它以非对称加密为基础,注册时,使用者的装置生成一对密钥:私钥留在装置的安全晶片里,从不上传;公钥交给伺服器。登入时,伺服器发出一道挑战,装置用私钥签署回应,伺服器用公钥验证。整个过程没有任何「秘密」在网络上来回。钓鱼网站即使外观完全一致,也拿不到可用的东西,因为通行密钥被绑定在原始网域上,换了网址就用不了。
通行密钥过去最大的不便,是私钥只存在于一台装置上 —— 换手机就要逐个帐户重新登记。这道门槛已经被打通。苹果用iCloud钥匙圈、谷歌用Chrome密码管理器、微软用Authenticator配合Microsoft帐户,都能把通行密钥同步到使用者名下的其他装置;不喜欢云端的,可以选YubiKey这类硬件安全钥匙,把密钥锁在实体晶片里随身携带。
表面看来,这跟密码管理器似乎是同一回事,都是在装置之间搬运登入凭证。但两者保护的东西,性质根本不同。密码管理器同步的是密码本身 —— 那是使用者和伺服器都持有的秘密,保险库一旦被攻破,攻击者立即拿到一条能直接走进每个帐户的钥匙。通行密钥同步的是私钥,而对应的伺服器从未持有任何秘密 —— 即使网站被骇,外泄的只是公钥,对攻击者一文不值。
那如果苹果或谷歌的同步服务本身被攻破呢?关键在于它们都采用端对端加密:私钥在离开装置之前,已经用一把只有使用者装置才知道的金钥加密,云端只看到一团密文,苹果和谷歌自己也解不开。即使整个同步系统被攻陷,外泄的也只是无法阅读的加密包。攻击者要真正动到通行密钥,唯一的路径是反过来攻陷使用者的Apple ID或Google帐户本身 —— 那需要同时取得密码、通过双重验证、再说服系统信任一台陌生装置,每一步都会在使用者现有的装置上弹出明确警示。风险并没有消失,但已从「储存层」往上推到「身分层」 —— 攻击面更窄,攻击成本更高,外泄的密文本身也没有立即可用的价值。
选择YubiKey这条路,则有它自己的代价。私钥永不离开晶片是它最强的保护,同时也是它最大的弱点:钥匙遗失,私钥也跟着消失,连Yubico都救不了你。因此业界的标准做法是永不只用一把 —— 注册每个帐户时同时登记两把以上,一把随身,一把锁在家中或保险箱。日常那把不见了,备用那把仍能登入,第一件事就是把旧钥匙从帐户里删除、再补一把新的。如果只用一把又遗失了,使用者就被迫倒退回每个服务各自的「帐户恢复流程」 —— 而这往往是整个系统最薄弱的一环,社交工程攻击者最爱瞄准的,正是这条路径。
通行密钥也不局限于一个生态系。注册时即使只有iPhone上的钥匙,登入Windows电脑上的网页时,仍可以用手机扫描萤幕上的QR code、靠蓝牙确认两台装置在同一空间之后完成验证。私钥始终没离开过手机,跨平台的衔接靠的是FIDO标准下的协定握手,而不是把秘密复制来复制去。这比起社交登入的「把身分外包」,已经是两个不同层次的设计。
当然,通行密钥并非万灵丹。它把风险从「储存层」推到了「装置层」与「身分层」 —— 攻击面更窄,门槛更高,但仍然存在。如果装置本身被恶意软体深度入侵、或被供应链在出厂前植入后门,存放在装置上的凭证都会受波及。和密码相比,这条攻击路径从来都是更难走的:键盘记录器抓不到「没有被输入的字串」,钓鱼网站骗不到「不会送出的私钥」,伺服器外泄也吐不出可用的秘密。但「更难」不等于「不可能」,安全工程从来没有一劳永逸的解。
还有一层结构性的隐忧值得正视。通行密钥的云端同步生态目前集中在苹果、谷歌、微软这几家平台手上,端对端加密能挡住技术层面的窥视,却挡不住政策层面的变动 —— 一旦平台改变存取规则、配合监管或执法要求、或使用者自己的平台帐户因任何原因被冻结,整个登入流程也会跟着动摇。FIDO Alliance已经在推动Credential Exchange Format这类标准,让通行密钥未来能在不同服务商之间搬迁,但要真正做到无缝互通,仍需时间。对没有智能手机的长者、不熟悉生物辨识的使用者、或受限于工作装置不能启用个人同步的人来说,纯密码短期内仍会以「备援」的形式继续存在。
使用者看到的,只是一个指纹或一次面容辨识的瞬间 —— 而那枚指纹从头到尾留在装置内部的安全晶片里,从不离开、从不上传,伺服器收到的只是一个用私钥签署过的回应,跟生物特征长甚么样子完全无关。背后其实是密码学三十多年的成熟成果,被消费级装置接住。苹果、谷歌、微软已内建支援,亚马逊、PayPal、GitHub、Revolut等大型服务也已陆续开放。FIDO Alliance公布的数据显示,全球已超过十亿人启用过至少一组通行密钥,消费者认知度约为四分之三。2026年4月,英国国家网络安全中心(NCSC)更正式建议消费者把通行密钥列为登入首选,不再推荐纯密码。
这不是又一轮科技公司推销新功能,而是一次工程模型的转换。最安全的密码之所以是没有密码,不是因为密码变得不重要,而是因为「共享秘密」这个前提,本身就是漏洞的源头。把秘密留在你装置里那枚指纹背后,永远不出门 —— 才是这条路真正走通的方向。