指纹登录是怎么跑起来的 (4)

应用密钥产生流程:应用密钥在应用首次安装的时候生成,应用密钥的私钥保存在手机端,并使用出厂前内置的私钥签名,然后发到腾讯的认证服务器验证签名,此时应用密钥的公钥会保存到应用的后台。

APP应用密钥产生过程

业务密钥产生流程:在使用登录或者支付的指纹认证注册的时候,应用会再生成一个业务密钥,业务密钥的私钥还是保存在手机端,业务密钥使用手机端的应用密钥进行签名,验证也只需要在应用的后台验证就可以了,此时和腾讯的认证服务器就没有关系了。

APP业务密钥产生过程

这样腾讯就不知道你的实际业务运营情况了,比如每天在线支付多少笔,但是APP安装量还是免不了会暴漏出来,话说APP都要上应用市场的,这个信息其实早就公开了。

关于SOTER详细介绍,可以看官方文档:https://github.com/Tencent/soter/wiki

IFAA的应用过程和SOTER差不多,这里就不再赘述了。另外国外还有一个FIDO联盟,也是解决这个问题的,国内是联想集团的子公司国民认证在推广这个,技术原理也都差不多。

iOS中的密钥安全

iPhone的操作系统和硬件都是自己控制的,所以对于安全控制它可以做的很好。

对于本机指纹认证,苹果也提供了Touch ID的API,可以在前端调用指纹认证,但是如果要发送到服务端去验证,基于各种安全考虑,就还是需要一个客户端密钥,这个客户端密钥有没有安全的产生方式呢?我没有找到官方的文档说明,很多基于这个方案的第三方应用可能都是自己生成的吧,尽量做到安全。当然这个也是猜测。

但是微信或者支付宝这种应用怎么能忍呢?SOTER曾经说要支持iOS,最后也是不了了之;IFAA宣传的是兼容支持iPhone 5s 以上所有 iOS 手机,不过它不开源。可能苹果最终还是不想把这块放开,同时基于苹果的强势地位,最有可能是苹果专门给这种应用开放了特定的API,不许外传。

如果是做指纹登录,其实可以直接使用苹果开放的Apple ID登录协议,支持指纹和刷脸认证,会给应用返回认证Token和授权码,应用后台拿着这两个再去找苹果验证。从这个逻辑上看,苹果的后台必然能安全的确认发起请求的客户端身份,所以估计和Android的原理差不多,只不过前后端的每次认证都得苹果来验证。

Web中的指纹认证

上面提到过一个FIDO联盟,它和W3C搞了一个WebAuthn标准,它的目的是标准化用户对基于 Web 的应用程序和服务的公钥认证的接口,说人话就是定了一个Web程序中使用公钥认证的标准,所谓的公钥认证就是上文提到的客户端密钥认证技术。这个国内产品好像使用的不多见,不过这件事挺牛的。它可以在Windows、Linux、Mac OS、Android、iOS、智能手表等各种设备中使用指纹识别、面部识别、虹膜识别、声音识别、实体密钥(USB连接、蓝牙连接、NFC连接)等多种方式进行认证,尽可能的摆脱对密码的依赖。

这个技术标准和APP中的公钥认证技术是一脉相承的,主要区别在于APP换成了浏览器,认证模块除了操作系统本身支持,还增加了对专用硬件的支持。有兴趣的可以去了解下。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zgwzsd.html