2016-12-27 24 views
1

我正在閱讀關於存儲一個secretkey(加密/解密數據),似乎沒有辦法實現這一點。一個攻擊者只能增加難度來完成這個任務。如何安全地在Android中存儲secretkey?

這真的是這樣嗎?

到目前爲止,我已經得到了什麼:

存放在共享偏好(私模) - 根植手機就能檢索它。

NDK C/C++本地代碼,創建.so文件 - 難以反編譯,但可以調用此.so文件並檢索它。

存儲密鑰的Web服務器看起來毫無用處,如果必須發送證書,惡意軟件可以記錄密鑰。

我太偏執?

+1

你從來不是很偏執,但你必須與可用性合作 – pedrofb

+0

@pedrofb我想是這樣的...... –

回答

5

你爲什麼不使用Android密鑰庫?它是專爲這個目的 https://developer.android.com/training/articles/keystore.html

Android的密鑰存儲系統,您可以存儲密鑰的容器中,使其更加難以從設備中提取

它比共享首選項或私人文件,如提取預防或密鑰使用授權具有相當大的優勢我不認爲存儲私鑰在服務器上

安全功能

的Android密鑰庫系統免受未經授權的使用主要材料。首先,Android Keystore減少未經授權使用Android設備以外的密鑰材料,防止從應用程序進程和整個Android設備提取密鑰材料。其次,Android KeyStore 通過讓應用程序指定其密鑰的授權使用,然後在應用程序的進程外執行這些限制,減輕了Android設備上密鑰材料的未授權使用。

在一些使用專用硬件的設備上實現它。作爲一個程序員,你可以知道是一個關鍵是硬件保護

這個概念是類似於iOS KeyChain,但雖然IOS KeyChain可以存儲密碼,生成和導入加密密鑰,Android的KeyStore只允許生成加密密鑰應用(沒有導入功能)

的鍵也可以被保護需要用戶來解鎖設備和/或呈現所述指紋

例如,爲了確保密碼,能夠生成與指紋保護的密碼密鑰,並用它來加密可存儲在首選項中的用戶憑證

+0

我讀過關於密鑰存儲的內容。這是一個很好的功能,但只適用於棉花糖。所以你將你的應用限制在非常小的組中。 –

+0

Android KeyStore自Android 18(4.3 JellyBean MR2)開始提供。在棉花糖可用指紋授權的關鍵用法。大約85%的用戶至少在這個版本中https://www.statista.com/statistics/271774/share-of-android-platforms-on-mobile-devices-with-android-os/ – pedrofb

+0

對不起,再右吧。重新閱讀https://developer.android.com/training/articles/keystore.html我發現它。 –

1

你是對的。大多數安全專家會告訴你,絕對沒有這樣的安全系統。根據攻擊者必須使用的資源級別來打破系統,正確的方式來考慮它。

然後,您可以在數據價值和其他考慮因素(如解決方案的複雜性和其他成本)之間平衡您的安全措施。

爲了詳細說明你的例子,假設你是不是擔心合法擁有者/用戶的手機被攻擊者,可以評估如下:

  1. 生根手機如果一個攻擊者風險獲得物質財產。爲了評估,數據與電話丟失/被盜的可能性之間的價值有多大,那麼誰擁有該數據就會獲得鑰匙並知道如何爲電話打根。
  2. 掩蓋祕密信息通常被認爲是無用的。我個人認爲這取決於情況。在這裏,攻擊者再次需要根植電話等。隱藏祕密信息的問題是,只有一個人才能弄清楚你所做的事情,並使這些信息完全失去了實現的價值。
  3. 如果你有一個密鑰記錄器,你有什麼安全性?

你應該看看使用「安全元素」的可能性。有關安全性堆棧交換的更多信息,請參閱this post

+0

我想平衡什麼事情是關鍵點,雖然... –

相關問題