知识卡片
WebAuthn用非对称加密的生物识别彻底取代密码
内容
[[三层认证模型与HTTP认证方案的安全递进]]里所有基于密码的方案都绕不开一个 根本弱点:密码本身要么被传输、要么被记住,就有泄漏和被冒认的风险。2019年 W3C批准的WebAuthn标准换了个思路:彻底抛弃密码,改用生物识别(指纹、 人脸)或实体密钥来生成一对非对称密钥。注册时,验证器(用户设备上TouchID /FaceID等认证硬件的统一接口)生成公私钥对,私钥只由验证器自己保存、 连用户本人都不知道,用私钥对服务端下发的随机字符串(Challenge)签名后 把公钥和签名结果发给服务端存证;登录时同样流程,验证器直接用已存的私钥 对新的Challenge签名,服务端用之前存的公钥验证签名即可确认身份。这套 设计的巧妙之处在于:私钥”没有人为泄漏的可能”(连用户都不知道),公钥 天生可以公开而不影响安全(能验证签名但不能生成签名),而且从根本上 消灭了”记错密码”“同一密码在多个网站被撞库”这类问题——用户压根不需要 再为每个网站想不同密码。
结构图:
sequenceDiagram
participant U as 用户/验证器(TouchID等)
participant S as 服务器
Note over U,S: 注册流程
S->>U: 生成Challenge和UserID下发
U->>U: 验证器生成密钥对, 私钥仅自己保存
U->>S: 用私钥签名Challenge, 连同公钥和UserID返回
S->>S: 存储该UserID对应的公钥
Note over U,S: 登录流程
S->>U: 下发新的Challenge
U->>U: 用已存私钥签名Challenge
U->>S: 返回签名结果
S->>S: 用已存公钥验证签名, 通过即登录成功
参考来源
- 位置:《凤凰架构:构建可靠的大型分布式系统》第5章"架构安全性"
5.1.1节"认证的标准"(源文件:_epub-src对应OEBPS/Text/chapter58.xhtml)
- 结论依据:原文详述WebAuthn注册流程(验证器生成密钥对、私钥签名
Challenge、服务端存储公钥)和登录流程(复用私钥签名新Challenge、服务端
用公钥验证),并说明私钥不为人知、公钥无须保密的安全性来源,直接支撑
本卡片结构梳理。
- 原始内容:WebAuthn采用非对称加密的公钥、私钥替代传统的密码……私钥是
保密的,只有验证器需要知道它,连用户本人都不需要知道,也就没有人为
泄漏的可能……彻底避免了用户在一个网站上泄漏密码,所有使用相同密码的
网站都受到攻击的问题。