你有没有发现支付宝、银行、淘宝、华为pay等等都是使用指纹支付,为什么指纹验证、面容验证通过它就能通过呢?本篇来说说背后的原理。

根据华为开发者文档介绍如下

FIDO2线上快速身份验证客户端:

  • 提供基于WebAuthn标准的FIDO2线上快速身份验证客户端实现,为应用及浏览器提供安卓Java API
  • 支持使用USB、NFC、蓝牙漫游认证器。
  • 支持指纹和3D面容的平台认证器。
  • 将系统完整性检测结果作为FIDO2认证的前置条件,保障认证结果更安全。

BioAuthn本地生物特征认证:

  • 将系统完整性检测结果作为使用本地生物特征认证的前置条件,保证生物特征认证更安全。
  • 基于密钥校验机制,保障认证结果安全可信。

  用户登录和用户支付时,需要验证使用者是否是服务的合法用户,就需要FIDO2线上快速身份验证能力。
  这些能力最常见的就是指纹验证。还有其他的蓝牙、NFC、USB验证,验证方式就是使用物理的安全密钥,这个可以在淘宝买到,比如Yubikey,是形状类似于U盾或者动态令牌的认证器。
  采用该方式的手机既可以作为客户端,也可以作为认证器(比如手机中的指纹识别硬件),只要验证指纹,即可完成登陆。

流程介绍

九、从华为HMS快速身份验证能力FIDO2看密码学知识_密码学

我个人理解的图中的名词解释一下:

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打包集成hmsSDK不像集成百度地图SDK一样,集成hmsSDKapp包几乎不增加,只是增加你调用的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客户端返回给appapp把这个签名发送给华为后台服务器认证。

4.华为后台服务器用我的公钥验证签名,公钥验证签名解密出来的随机值和最初发送的一样则验证成功。然后把结果返回给我的app

5.收到验证成功的消息,我的app就能成功付钱了。

  聪明的小伙伴已经发现了,注册过程和认证过程基本就是第3、5步不同,注册是用的华为厂商内置的私钥签名,这是每个华为手机通用的,后续使用的是你自己私钥签名随机值(这和数字证书原理一样),这就代表你就是你,不是别人要付款,是你要付款。

综上所述:
  把敏感信息需要的验证交给华为,华为认证通过则可以处理接下来的逻辑。


关注、留言,我们一起学习。



----------------------Talk is cheap, show me the code-----------------------