告别密码时代:深入解析基于公钥加密的Passkey技术

本文详细解析了基于公钥加密的Passkey技术工作原理,涵盖注册流程、密钥对生成、依赖方验证等核心技术环节,揭示了如何通过非对称加密实现无需密码的安全身份验证机制。

Passkey工作原理:通过公钥加密实现无密码化

密码的致命弱点:共享密钥

过去五年间,由苹果、微软和谷歌领导的FIDO联盟一直在开拓一个无需密码即可登录网站和应用的未来。这种所谓的"无密码未来"基于一种名为Passkey的新型登录凭证,其本身主要建立在已有数十年历史的公钥加密技术之上。

为何要淘汰密码?

根本原因在于:人类自身是问题的一部分。尽管我们努力保护自己,却总是被诱骗向恶意行为者泄露密码。网络钓鱼、短信钓鱼等手段层出不穷,恶意广告也重新成为黑客诱使用户访问看似合法网站的技术。

二十年来科技厂商和IT部门试图教育终端用户各种威胁及防护措施,但直到2020年代,每周仍会出现因凭证管理不当导致的大型数据泄露事件。

Passkey的安全优势

Passkey与密码的相似之处在于都涉及密钥,但关键区别在于:使用Passkey时,你的密钥秘密永远不会与网站和应用(统称为"依赖方")共享。事实上,由于Passkey密钥的自动创建和存储方式,大多数用户甚至不知道自己的密钥是什么或在哪里找到它们。

注册仪式详解

认证器配置

使用Passkey需要认证器的存在。以MacOS为操作系统、Chrome为浏览器的情况下,用户会面临多种认证器选项的选择。需要注意的是,这里的"认证器"是在Passkey语境下使用的,并不指代像Google Authenticator这样专门生成时间型一次性密码(TOTP)的移动应用。

Bitwarden密码管理浏览器扩展作为认证器使用时,必须首先在Chrome中注册为WebAuthn兼容的凭证提供者。WebAuthn是万维网联盟(W3C)制定的网络无密码认证标准官方名称。

公钥加密流程

步骤1:创建和存储新的公钥/私钥对和凭证ID

认证器创建并存储一个公钥/私钥对,以及一个特定于终端用户和该密钥对的唯一凭证ID。每个Passkey都被分配一个由认证器生成的非人类可读凭证ID。

当使用第三方密码管理器(如Bitwarden、1Password或LastPass)作为认证器时,认证器会在安全软件容器(通常称为保险库)中为依赖方创建新记录,并将新创建的公钥/私钥对和凭证ID与该记录关联。

步骤2:将新创建的公钥和凭证ID传输给依赖方

当你在网站上点击创建Passkey按钮时,站点(依赖方)会响应一个有时效性的Passkey配置指令offer,称为PublicKeyCredentialCreationOptions,其中包含一个称为"挑战"的随机字符串。

认证器准备用其自己的信息包PublicKeyCredential来响应这个offer。该包中包含新创建的公钥、认证器生成的凭证ID、前述挑战的副本等各种信息。认证器使用新创建公钥的匹配私钥对整个包进行数字签名,并将其响应交给浏览器,然后由浏览器将其传递给依赖方的服务器。

步骤3:依赖方记录公钥和凭证ID

这是Passkey神奇安全特性的另一个锚点时刻。记住:使用Passkey时,密钥秘密(即公钥/私钥对中的私钥)永远不会与依赖方共享(在注册期间和后续认证过程中都不会)。

大多数Passkey注册都是在用户已经登录依赖方网站或应用后触发的,因此依赖方已经确切知道要将新接收的公钥与哪个用户账户永久配对。

注册成功

一旦新的公钥凭证成功在依赖方注册,认证器的弹出窗口应该消失,依赖方应该呈现一个新页面或屏幕,反映Passkey的成功注册。

如果你的认证器选择支持同步功能,并且你在多个设备上使用该认证器,那么Passkey的私钥组件将被同步到其他设备。如果认证器不支持同步(如漫游认证器),那么Passkey基本上就与该设备绑定。

恢复代码的重要性

某些依赖方(如Shopify)会提供账户恢复代码。如果你以某种方式丢失了所有凭证(用户名、密码、Passkey等),此类恢复代码可能是重新获得账户访问权限的唯一方式。

通过这种基于公钥加密的Passkey技术,科技行业找到了一种防止我们成为自己最大敌人的方法,为实现真正的无密码未来奠定了坚实的技术基础。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计