漫谈 WebAuthn
写在最前面的废话:袁本初是没打算写这篇文章的,关于无密登录,可以找到很多适用的 Demo 并快速上手体验,写的也比较好,后来发现,上周还记得它们是啥和啥,这周再看见就又不知道了。
密码的烦恼
记密码这件事,挺烦的,尤其在互联网如此发达的今天。信息越来越复杂,做点什么事都需要注册,必须得输入密码,密码规则又五花八门,数量上来后导致根本记不住,如果没有密码找回功能,很多网站使用频率就是一次。不同的网站要求不一样,不能一套密码一把梭撸到底,很容易在某平台数据泄露之后,被撞库导致隐私泄露。
最喜欢支持手机验证码登录场景,或者支持手机验证码找回密码,毕竟不需要记密码。现如今政府的网站做的比早些年好太多,使用北京通扫码登录,一次性全解决各种登录问题,体验不要太舒服。
后来,慢慢养成了,对应不同安全级别的几套密码,but似乎真是没什么用,网站只要时间稍微长一点没有使用,就会忘记密码,一通折腾之后,成功导致账号被冻结,经常性的。
iPhone 和 Chrome 的自动密码填充能解决很多问题,如果在 PC 端访问网站,也能体验到指纹登录或者人脸识别登录,那岂不是美哉。今天就来谈一谈新型的无密码身份验证方法。
我们从认识一个联盟组织开始。
FIDO 联盟
Fast Identity Online 联盟,线上快速身份验证联盟。由很多领先的技术公司组织成的开放式行业协会,负责开发、推广并建立身份验证开放标准,使命是 Create authentication standards to help reduce the world’s over-reliance on passwords. (即建立统一的身份验证标准,从而减少世界对密码的过度依赖),FIDO 联盟发布了三套规范,U2F(Universal 2nd Factor)、UAF(Universal Authentication Framework)和 CTAP(Client to Authenticator Protocol),统称为 FIDO2,是最新的标准。
-
Web Authentication (WebAuthn) WebAuthn定义了一个标准 Web API,该 API 内置于浏览器和平台中,以支持 FIDO 身份验证。
-
CTAP1 FIDO U2F 的新名字,允许使用现有的 FIDO U2F设备,通过USB、NFC 或 BLE(即蓝牙,Bluetooth Low Energy)在支持 FIDO2 的浏览器和操作系统上进行身份验证 ,以获得第二因素体验。
-
CTAP2 CTAP的更新版,允许使用外部身份验证器(FIDO 安全密钥、移动设备)通过 USB、NFC 或 BLE 在支持 FIDO2 的浏览器和操作系统上进行身份验证,从而实现无密码、第二因素或多因素身份验证体验。
-
UAF 支持无密码体验,用户选择本地身份验证机制(如滑动手指、看摄像头、对麦克风讲话、输入 PIN 码等)将其设备注册到在线服务,在需要服务进行身份验证时重复本地身份验证操作即可。从该设备进行身份验证时,用户不再需要输入密码。协议还允许结合指纹+PIN等多种身份验证机制的体验。
-
U2F 支持第二因素体验,允许在线服务通过为用户登录添加第二因素来增强其现有密码基础设施的安全性。用户像以前一样使用用户名和密码登录,服务提示用户随时提供第二因素设备(例如 FIDO 安全密钥),允许在不影响安全性的情况下简化密码(例如 4 位 PIN),在注册和身份验证过程中,用户只需按下 USB 设备上的按钮或者点击 NFC 或 BLE 即可呈现第二个因素。
小思考:在日常生活中,你知道都在哪些场景用到了这些协议吗?
那么,Browser 是如何发挥承上启下的作用?
WebAuthn
上链接。
有写好的,咱们先直接体验。webauthn.io/
看视频介绍。webauthn.guide/
WebAuthn 是一种 API 规范,使应用程序能够使用安全的身份验证方法进行用户注册和登录,为用户提供了一种使用基于硬件或软件的身份验证器(例如 USB 安全密钥或与笔记本电脑或移动设备集成的安全硬件元件)对自己进行身份验证的方法,而不是仅仅依赖密码。
这些身份验证器依靠公钥加密技术来提供安全的帐户注册和身份验证。为此,用户完成注册后,将身份验证器设备与其帐户相关联,从而生成公钥-私钥对。
私钥安全地存储在用户的设备上,而公钥则在 Web 应用程序服务器上注册。在登录期间,用户通过完成注册设备的身份验证仪式来验证其身份,并且服务器使用先前注册的公钥来验证签名。
作为开发人员,可以使用 WebAuthn 为用户提供更安全且用户友好的身份验证机制。大多数现代 Web 浏览器和平台都支持它,开源库和身份平台可简化与现有身份验证流程的集成。
Passkeys
指可以通过某种外部机制在设备之间同步的 WebAuthn 凭据,现在是一种通用术语,指代任何 WebAuthn 凭据。
我们可以在 Web端使用 Passkeys,比输入密码容易,也更加的安全。我们也不需要再依赖于诸如生日、某个特殊的名字,或者比如123456、qwertyuiop 等等内容。我们可以使用指纹、人脸、PIN 码等技术,与密码不同,Passkeys 可以抵御网络钓鱼等网络攻击,比短信一次性代码更安全。
我们在真实的场景中,g.co/passkeys 体验下 Google 的账号。
![]() | ![]() | ![]() |
![]() | ![]() | ![]() |
passkey 是怎么发挥作用的
- Backend:服务端存储公钥(public key)和其他的元数据信息
- Frontend:浏览器和服务的桥梁
- Browser:就是浏览器
- Authenticator:负责存储私钥,因设备而异
验证方式对比 | 密码 | passkey |
---|---|---|
安全性 | 通常存在规律,易被猜测,被撞库 | 对外暴露非对称公钥,黑产无法伪造设备解密 |
重复性 | 最好每个平台唯一,不重复 | 只要私钥不泄露,理论可以长期使用 |
风险性 | 设备丢失,有风险,可以被修改 | 不存在这类问题,是生物认证 |
钓鱼执法 | 伪造诱导用户泄露密码,盗取数据 | 必须先注册后再使用,有效规避 |
服务存储 | 密码加盐 hash 存储,一旦泄露,易被破解 | 公钥即使泄露,也没有太大影响 |
结语
就像我们通过指纹或人脸在移动端上解锁 APP 体验一样,现在开始,就可以让 Web 端也具备这样简单易用又安全的功能啦,当然,任何改变都需要一些时间,期待不久以后,我们就不再需要记住密码啦。
参考材料
转载自:https://juejin.cn/post/7262010787228598330