问题
钓鱼式攻击是网络上最严重的安全问题:81% 的黑客相关账号都属于安全问题 利用安全系数低或被盗的密码。业界同仁 多重身份验证,但是 各种实施方式都非常分散,而且大部分实施方式仍无法充分解决钓鱼式攻击问题。 从那时起,我们就一直与 FIDO 联盟合作, 2013 年,最近与 W3C 合作,实施了 任何 Web 应用都可以使用的防范钓鱼式攻击的协议。
什么是 WebAuthn?
Web Authentication API 为 Web 通过用户代理中介的应用、验证器的访问,通常 通过 USB/BLE/NFC 访问的硬件令牌,或直接内置于 用于生成应用级范围的容器并对其进行质疑 (eTLD+k) 公钥凭据。这支持各种用例,例如:
- 顺畅的防钓鱼式攻击 2FA(与 密码)。
- 无密码、基于生物识别技术的重新授权。
- 流畅的双重身份验证和防钓鱼式攻击,无需密码(仅在使用 (针对无密码账号)。
该 API 预计将在大多数主流浏览器中实现,旨在用于实现以下目的: 既能简化需要在线验证身份时遇到的界面, 大大减少钓鱼式攻击
WebAuthn 扩展了 Credential Management API 并新增了
名为 PublicKeyCredential
的凭据类型。WebAuthn 将
在浏览器与身份验证器之间进行通信,并允许用户:
- 为网站创建并注册公钥凭据。
- 证明对相应网站拥有相应私钥的所有权, 键。
身份验证器是指可以生成私钥/公钥对并收集 同意。只需简单点按一下,即可同意签名, 指纹读取或通过其他方法读取,只要符合 FIDO2 即可 (您有一个认证计划, 由 FIDO 联盟认证的身份验证器)。身份验证器可以内置于 (如智能手机上的指纹扫描器)或通过 USB、蓝牙低功耗 (BLE) 或近距离无线通信 (NFC)。
工作原理
创建密钥对并注册用户
当用户想要在网站(由 WebAuthn 引用)注册凭据时 称为“依赖方”):
- 依赖方生成一个质询。
- 依赖方通过 Credential Manager API 要求浏览器 为依赖方生成新凭据,并指定设备 功能,例如设备是否提供自己的用户身份验证 (通过生物识别等方式)。
- 身份验证器征得用户同意后,会生成 并将公钥和可选的签名证明返回给 网站。
- Web 应用将公钥转发到服务器。
- 服务器将公钥与用户身份一起存储 用作日后身份验证的凭据。
let credential = await navigator.credentials.create({ publicKey: {
challenge: new Uint8Array([117, 61, 252, 231, 191, 241, ...]),
rp: { id: "acme.com", name: "ACME Corporation" },
user: {
id: new Uint8Array([79, 252, 83, 72, 214, 7, 89, 26]),
name: "jamiedoe",
displayName: "Jamie Doe"
},
pubKeyCredParams: [ {type: "public-key", alg: -7} ]
}});
对用户进行身份验证
当网站需要获取证据以证明其正在与正确的 用户:
- 依赖方生成质询并向浏览器提供列表 所有已向该用户注册的凭据也可以指明 例如在本地内置身份验证器上或 通过 USB、BLE 等连接外部设备
- 浏览器要求身份验证器对验证进行签名。
- 如果身份验证器包含某个给定的凭据, 在获得用户同意后,将已签名的断言返回给 Web 应用。
- Web 应用将已签名的断言转发给依赖方的服务器 进行验证。
- 服务器验证之后,就会考虑身份验证流程 成功。
let credential = await navigator.credentials.get({ publicKey: {
challenge: new Uint8Array([139, 66, 181, 87, 7, 203, ...]),
rpId: "acme.com",
allowCredentials: [{
type: "public-key",
id: new Uint8Array([64, 66, 25, 78, 168, 226, 174, ...])
}],
userVerification: "required",
}});
前往以下网址自行试用 WebAuthn: https://webauthndemo.appspot.com/.
接下来是什么?
Chrome 67 Beta 版支持 navigator.credentials.get({publicKey: ...})
和 navigator.credentials.create({publicKey:... })
,并允许使用
在桌面设备上通过 USB 传输使用 U2F/CTAP 1 身份验证器。
即将发布的版本将支持更多传输方式,例如 BLE 和 NFC, 新的 CTAP 2 线协议我们也在努力开发更高级的流程 由 CTAP 2 和 WebAuthn 启用,例如受 PIN 码保护的身份验证器、本地 选择账号(而无需输入用户名或密码),并且 指纹注册。
请注意,Microsoft Edge 也支持该 API 以及从 Firefox 60 开始,Firefox 可支持 WebAuthn。
资源
我们正在努力编写更详细的文档:
- WebAuthnDemo 依赖方示例 实现
- WebAuthn 分析 作者:Adam Langley
专题演讲“网页版注册和登录的新变化” Google I/O 2018 上介绍了 WebAuthn。