4

我正在嘗試使用用戶身份驗證方法(確切指紋),並且還在調查Android KeyStore。我試圖建立一個系統,允許用戶設置一個指紋,將用戶登錄到我的服務器。目前,服務器需要一個POST請求,它需要一個有效的用戶名/密碼組合。使用Android KeyStore存儲用戶身份驗證憑證

我有幾個關於如何工作的問題,因爲我只有初學者對Fingerprint API和KeyStore的工作方式的理解。

1)當我提示輸入指紋並獲得成功的響應(這很容易完成) - 如何將其轉換爲有效的用戶名/密碼,以便我可以啓動POST請求?我是否需要將用戶名和密碼存儲到KeyStore

2)當我設置KeyStore時,看起來如何?我是否需要爲用戶名和密碼設置別名?例如「myapp_user」,「myapp_pass」?

3)如何將用戶名和密碼的值存儲到KeyStore

4)我是否正確地接近這個問題?有沒有更好的方法來安全地將指紋鏈接到用戶名/密碼組合?

謝謝你的幫助!

+0

AndroidKeyStore在4.4和當前版本之間已經發生了很大變化(一開始只有RSA密鑰可以存儲)。因此,您應該始終注意您所定位的最小SDK。 – Robert

+0

夠公平@Robert。我的問題是針對API 23,但我也有興趣學習如何處理<23以獲得更大的用戶覆蓋面。 –

回答

3

使用AndroidKeystore的一般過程是您在AndroidKeyStore中生成一個密鑰。該密鑰永遠不會離開密鑰庫(不能導出),但只要您使用特定算法(並非所有算法都支持),您就可以使用它。你可以看到here哪個Android版本支持什麼加密類型。

在Android API 23+上,您可以直接生成AES密鑰(在AndroidKeyStore中)並使​​用該AES密鑰來加密使用數據,如您提到的用戶憑證。

在API23之前需要額外的步驟:首先在AndroidKeyStore中生成一個RSA密鑰,然後在AndroidKeystore之外生成一個隨機AES密鑰(因爲不支持AES內部)。然後使用您在AndroidKeyStore中生成的RSA密鑰對生成的AES密鑰進行加密,並將加密的AES密鑰保存到私有應用程序數據目錄中。

之後,您可以在選項1中使用生成的AES密鑰對用戶憑證進行加密。

+0

我想我的問題更多的是關於理解過程。我很容易創建一個新的別名並生成一個公鑰/私鑰對。但我在哪裏存儲用戶名和密碼?我是否加密這些值並將它們放入SharedPreferences或其他東西?標準做法是什麼?我以爲我實際上是將用戶名和密碼放入KeyStore中,並且需要一個密鑰才能返回它們。也許我對KeyStore應該做的事情有錯誤的想法。 –

+0

作爲參考,我在我的搜索中查看了以下示例。 http://www.androidauthority.com/use-android-keystore-store-passwords-sensitive-information-623779/ https://www.sitepoint.com/securing-your-android-apps-with-the-指紋-API/ 第一個示例僅對文本進行加密/解密,但不將其存儲在任何地方。 第二個示例將加密文本存儲到SharedPreferences中。 –

+1

@h_k:密鑰庫用於存儲加密密鑰。您不能在其中保存任意數據。如果你想保護數據,就像我描述的那樣加密它並將它存儲在某個地方(例如偏好)。不要保存使用過的AES密鑰(API23 +),將其保存的RSA加密爲Android23至API23。 – Robert

0

我有同樣的要求。下面是步驟。

  1. 註冊指紋選項用戶將提供用戶名密碼,然後指紋。
  2. 我們需要在android store中生成密鑰並將其傳遞給服務器(用戶名,密碼和生成的密鑰)。
  3. 在服務器中,他們將保存與用戶名和密碼對應的該密鑰。
  4. 每當用戶嘗試使用手指點擊登錄時,從客戶端我們需要採取指紋認證成功的密鑰,並將其傳遞給服務器。
  5. 在服務器中,他們將檢查表格行(服務器數據庫),其中的密鑰已保存並將使用相應的用戶名和密碼。

我的疑問是,這把鑰匙會保持不變。我們將密鑰傳遞給服務器端,同時註冊指紋t以及用戶名密碼。所以如果用戶再次嘗試登錄並創建密鑰,它將保持不變。