Android_指纹支付_安全问题_前后端交互逻辑

具体代码不详细介绍,可以自己去看这些资料,只详细介绍最终的客户端和服务器端交互逻辑。

/********************************************1,参考****************************************/
// 重点参考资料
https://github.com/gaoyangcr7/BiometricPromptDemo // FingerManager + Biometric 适配,代码简洁清晰,但是没有考虑安全问题 https://www.jianshu.com/p/1eae12582a31 // 对应的blog

https://blog.csdn.net/u011339364/article/details/78667701 // 无demo,但是是将加密说的最透彻的文章了,也有反射获取fingerId

https://github.com/googlesamples/android-AsymmetricFingerprintDialog // google官方demo,非对称加密 https://github.com/googlesamples/android-FingerprintDialog // google官方的demo,签名实现 https://android-developers.googleblog.com/2015/10/new-in-android-samples-authenticating.html // 官方的文案,有与后台的交互。但是拿不到fingerId

/// 其他参考资料:
https://github.com/PopFisher/FingerprintRecognition // demo写的特别乱,很多没必要的乱转[估计官网直接转的],而且没有考虑安全问题
https://www.cnblogs.com/popfisher/p/6063835.html // 对应的blog

https://github.com/feelschaotic/FingerPrintAuth // 有加密和解密;是本地加密和解密的。有逻辑:新录入的指纹,重新生成密钥对【相对可以了,虽然代码写的不好[不够简洁,过度封装]】
https://www.jianshu.com/p/ed880f35f97f // 对应的blog

/// 异常情况处理
https://www.programcreek.com/java-api-examples/index.php?api=android.security.keystore.KeyPermanentlyInvalidatedException
// 指纹识别异常,针对新增情况处理

https://developer.android.google.cn/reference/android/security/keystore/KeyPermanentlyInvalidatedException
// KeyPermanentlyInvalidatedException

https://blog.csdn.net/hpp_1225/article/details/79272248
// android.security.KeyStoreException: Key user not authenticated

/********************************************2,使用细节****************************************/

笔记:
1,CryptoObject crypto是可以为null,若为null,则表示没有进行秘钥验证
2,当指纹识别失败后,会调用onAuthenticationFailed()方法;系统给我们提供了5次重试机会,
也就是说,连续调用了5次onAuthenticationFailed()方法后,会调用onAuthenticationError()方法
3,当系统调用了onAuthenticationError()和onAuthenticationSucceeded()后,传感器会关闭,
只有我们重新授权,再次调用authenticate()方法后才能继续使用指纹识别功能。
4,当系统回调了onAuthenticationError()方法关闭传感器后,这种情况下再次调用authenticate()会有一段时间的禁用期,
也就是说这段时间里是无法再次使用指纹识别的。当然,具体的禁用时间由手机厂商的系统不同而有略微差别,有的是1分钟,有的是30秒等等。
而且,由于手机厂商的系统区别,有些系统上调用了onAuthenticationError()后,在禁用时间内,其他APP里面的指纹识别功能也无法使用,
甚至系统的指纹解锁功能也无法使用。而有的系统上,在禁用时间内调用其他APP的指纹解锁功能,或者系统的指纹解锁功能,就能立即重置指纹识别功能。

/********************************************3,交互逻辑****************************************/

方案简介:
开启支付流程:
1)Android创建非对称的公钥和私钥,保存在系统安全区域中。
2)Android验证指纹后,用户验证支付密码,验证成功后将公钥上传给服务器。

支付流程:
1)用户选择支付,Android开始指纹验证,用户输入指纹。
2)Android从系统安全区域获取私钥,使用私钥对商品信息进行签名,然后将商品信息和签名上传给服务器。
3)服务器使用公钥和商品信息,对上传的签名进行校验。

这一套方案整体没问题,最终也是这么做的。
但百密一疏,公钥上传可能会被截获。所以最终解决方案,是公私钥自己做一对,然后放进app,最后放入系统安全区域。其余的交互逻辑基本一致。[这里参考的是,微信SOTER]

 

/********************************************4,核心问题****************************************/

1)如何区分新指纹,fingerId是获取不到的。但是新增指纹之后,公私钥会变化,再次使用会报异常;因此,只要使用公私钥报异常,就让用户去输入支付密码支付,同时更新公私钥即可。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值