你有没有发现支付宝、银行、淘宝、华为pay等等都是使用指纹支付,为什么指纹验证、面容验证通过它就能通过呢?本篇来说说背后的原理。
根据华为开发者文档介绍如下 FIDO2线上快速身份验证客户端:
- 提供基于WebAuthn标准的FIDO2线上快速身份验证客户端实现,为应用及浏览器提供安卓Java API
- 支持使用USB、NFC、蓝牙漫游认证器。
- 支持指纹和3D面容的平台认证器。
- 将系统完整性检测结果作为FIDO2认证的前置条件,保障认证结果更安全。
BioAuthn本地生物特征认证:
- 将系统完整性检测结果作为使用本地生物特征认证的前置条件,保证生物特征认证更安全。
- 基于密钥校验机制,保障认证结果安全可信。
用户登录和用户支付时,需要验证使用者是否是服务的合法用户,就需要FIDO2线上快速身份验证能力。 这些能力最常见的就是指纹验证。还有其他的蓝牙、NFC、USB验证,验证方式就是使用物理的安全密钥,这个可以在淘宝买到,比如Yubikey,是形状类似于U盾或者动态令牌的认证器。 采用该方式的手机既可以作为客户端,也可以作为认证器(比如手机中的指纹识别硬件),只要验证指纹,即可完成登陆。
流程介绍
我个人理解的图中的名词解释一下:
3rd App:第三方应用程序,理解为你公司的app 3rd FIDO Server:FIDO服务器,理解为华为服务器,当然也可以是小米服务器等等第三方厂商的服务器。 FIDO Client:FIDO客户端,是HMS的SDK能力的一部分 FIDO Authenticator:FIDO认证器,是HMS的SDK能力的一部分 BioAuthn:本地生物能力认证,是HMS的SDK能力的一部分,如果root设备,会提示不安全的设备环境,直接禁止该生物认证功能。
流程说明如下
官方晦涩难懂的解释如下: 1.应用程序集成FIDO2客户端SDK,向FIDO服务器发起注册请求。 2.FIDO服务器将随机生成挑战值返回给应用程序,应用程序将挑战值发给FIDO客户端,FIDO客户端连接认证器,发起注册。 3.认证器验证通过,生成一对用户公私钥,并将私钥保存在本地。然后用其预置的私钥将生成的公钥及挑战值进行签名。 4.认证器返回签名给FIDO客户端,FIDO客户端返回给应用程序。应用程序发给FIDO服务器进行注册。 5.FIDO服务验证签名,保存公钥,并将处理结果返回给应用程序。
我的通俗解释如下,以华为厂商为例:
1.付钱每次输入密码很麻烦,还容易被别人看到,现在我想输入指纹或者面容。app
客户端集成FIDO2
客户端(SDK
),向华为后台服务器发起注册请求,告诉后台你要录入指纹了,以后可能就是要指纹登陆和支付了,所以华为得负责其中的安全。
注意:
hms
已内置华为手机,SDK
直接按文档声明集成,实现能力在于hms
,不会在app
里,所以app
打包集成hms
的SDK
不像集成百度地图SDK
一样,集成hms
的SDK
时app
包几乎不增加,只是增加你调用的API
的代码的体积,达不到MB
级别,也许只有几十KB
。
2.华为后台服务器生成随机值给app
客户端,app
客户端就发送给FIDO
客户端,FIDO
客户端连接认证器,向指纹硬件或者面容硬件发起认证,认证通过就可以注册。
3.本地指纹验证通过,生成一对用户公私钥,并将私钥保存在本地。然后用厂商内置的私钥将生成的公钥及随机值进行签名。
4.认证器返回签名给FIDO
客户端,FIDO
客户端返回给app
客户端。app
客户端发给华为后台服务器进行注册。
5.华为后台用厂商公钥验证签名,公钥验证签名解密出来的随机值和最初发送的一样则验证成功。然后保存你的公钥,并将处理结果返回给app
。
这里app
客户端指纹或者面容开关就算是开启了。
上面开启指纹或者面容认证算是注册过程,下面说说每一次应用指纹和面容的认证过程
官方晦涩难懂的解释如下: 1.应用程序集成FIDO2 SDK,并向FIDO服务器发起认证请求。 2.FIDO服务器将随机生成挑战值返回给应用程序,应用程序将挑战值发给FIDO客户端,FIDO客户端连接认证器,发起认证。 3.认证器验证通过,用其保存的私钥对挑战值进行签名。 认证器返回签名给FIDO客户端,及应用程序。应用程序发给FIDO服务器进行认证。 4.FIDO服务验证签名,并将处理结果返回给应用程序。
我的通俗解释如下,以华为厂商为例:
1.我现在需要付钱了。APP
客户端向华为后台服务器发起认证请求,比如指纹验证。
2.华为后台服务器将生成随机值返回给app
客户端,app
又将随机值发给FIDO
客户端,FIDO
客户端连接指纹硬件,发起认证。
3.认证通过,用注册时生成的私钥对这个随机值进行签名。认证器把签名返回给FIDO
客户端,FIDO
客户端返回给app
,app
把这个签名发送给华为后台服务器认证。
4.华为后台服务器用我的公钥验证签名,公钥验证签名解密出来的随机值和最初发送的一样则验证成功。然后把结果返回给我的app
。
5.收到验证成功的消息,我的app
就能成功付钱了。
聪明的小伙伴已经发现了,注册过程和认证过程基本就是第3、5步不同,注册是用的华为厂商内置的私钥签名,这是每个华为手机通用的,后续使用的是你自己私钥签名随机值(这和数字证书原理一样),这就代表你就是你,不是别人要付款,是你要付款。
综上所述: 把敏感信息需要的验证交给华为,华为认证通过则可以处理接下来的逻辑。