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是獲取不到的。但是新增指紋之後,公私鑰會變化,再次使用會報異常;因此,只要使用公私鑰報異常,就讓用戶去輸入支付密碼支付,同時更新公私鑰即可。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章