簡體   English   中英

在Android應用程序中隱藏加密密鑰

[英]Hiding encryption key in Android Application

我想隱藏用戶在加密的用戶手機中輸入的一些數據。 據我所知,我可以使用鍵/種子值加密/解密數據,但如果我在代碼中隱藏鍵值,我知道它可以以某種方式找到(例如反編譯Java代碼)。

您有什么建議讓這個過程更難嗎?

在應用程序中隱藏密鑰是不可能的,因此資源豐富的黑客無法將其拉出來。 您可以嘗試對密鑰進行模糊處理並使其難以查找,但它始終可以執行。

請參閱: https//www.excelsior-usa.com/articles/java-obfuscators.html#examples

最好的選擇是要求您的用戶指定PIN或密碼並將其用作加密密鑰。 這樣,如果設備丟失或被盜,密鑰仍然是安全的,它還可以防止有人反編譯您的應用程序並獲取應用程序的所有實例的加密密鑰。

冰淇淋三明治(Android 4.0)的一個新功能是鑰匙串API 平台亮點頁面 (強調我的):

Android 4.0使應用程序更容易管理身份驗證和安全會話。 新的鑰匙串API和底層加密存儲允許應用程序存儲和檢索私鑰及其相應的證書鏈。 任何應用程序都可以使用鑰匙串API安全地安裝和存儲用戶證書和CA.

如果您正在為用戶名/密碼數據執行此操作,則應該簽出實施身份驗證器

由於android上沒有任何安全存儲(至少從2.2開始),你必須自己編寫。

真正安全地執行此操作的唯一方法是使用從用戶提供的密碼派生的密鑰進行加密(PBKDF2 / RFc2898就是這樣)。 加密只能像你的密鑰一樣安全,如果你把它存儲在手機上,那么有人可以找到並使用它。 這允許您讓用戶存儲密鑰而無需實際記住大型AES密鑰。

有些庫可以為android做這個。 如果你想要一些如何做的基礎,我寫了一個可以在這里找到的Windows手機。

如果加密/解密都發生在手機上,那么堅定的黑客就能破解它。 您可以通過使用obfustication或(如果適合您的應用程序)將用戶輸入添加到加密/解密代碼中來使生活更加艱難。

如果您的應用程序需要網絡連接,則可能需要將某些代碼卸載到其他地方運行的服務器,以便加密數據存在於設備上,但是密鑰會在運行時下載。 仍然沒有防黑客,但它降低了被盜設備上機密數據的風險。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM