[英]Best way to secure Android app sensitive Data?
是的,這是一個非常普遍的問題,但我正在試圖找到一種最好的方法來處理觸及基礎的應用程序,該應用程序將敏感數據分發到應用程序。 任何鏈接,一般信息建議等..將不勝感激。
由於應用程序將存儲從數據庫中恢復的持久數據一段時間......所有內容都變得有些敏感。
這在很大程度上取決於您的受眾。 通常,Android OS禁止應用程序通過經過驗證的Linux文件權限訪問彼此的文件(即數據庫,首選項文件,存儲在應用程序私有目錄中的常規文件)。 但是,在有根設備上,應用程序可以獲取root訪問權限並讀取所有內容。 一些要考慮的事情:
總而言之,如果您的信息不是超級敏感的(例如信用卡信息),我建議您堅持使用Android提供的默認安全性(即以純文本保存所有內容,知道其他應用無法訪問它)。
否則,加密是可行的方法。 這不是100%安全(黑客可以解組你的應用程序並弄清楚如何解密數據),但這是一個很大的痛苦,破解並將阻止大多數黑客。 特別是如果你用ProGuard之類的東西混淆你的代碼。
你有幾個選擇。 首先,始終使用HTTPS。 啟用HTTPS后,我建議采取兩種額外的安全措施:
time=1321802432&key=[generated-key]
generated-key
是從time
參數生成的。 例如: md5(time + salt)
。 當服務器收到此請求時,它可以做兩件事:
key
是否確實等於md5(time + salt)
(請注意,只有客戶端和服務器知道鹽,並且它可以與上面的API密鑰類似地進行模糊處理),並且 time
不是太遠(例如,如果過去的時間超過1-2分鍾,請考慮請求無效)。 如果您還在進行純HTTP請求,那么第二種方法會更有用,每個人都可以看到正在發送的參數。 而且,從反編譯代碼中找出它要困難得多。 特別是如果您將鍵計算邏輯分布在多個類中。
但請注意, 沒有什么能夠破解你的應用程序。 您可以根據需要進行模糊處理,如果黑客真的決心獲取您的數據,他將能夠通過反編譯您的應用程序並花費許多不眠之夜通過您的代碼並弄清楚請求是如何形成的。 保護數據的唯一真正方法是向用戶提供密碼,除了完成我上面寫的所有工作。 您無法從反編譯代碼中獲取僅存在於某人(用戶)頭部的密碼。
(來自Google搜索)
我最近一直在研究這個問題,感謝Google和Bing的搜索,這個頁面已經出現了很多。 用於安全地在設備上存儲數據的廣泛接受的過程是使用諸如AES的強加密算法。 更難的問題是“AES需要一個安全的密鑰。你用鑰匙做什么?”
谷歌最近發布了針對應用程序的基於雲的存儲解決方案,因此如果情況允許,您可以考慮將密鑰存儲在那里。 否則,它似乎在服務器之外獲取密鑰更好。 如果您可以讓用戶打入PIN,那實際上效果最好。 您可以進行密碼派生以存儲密碼,您可以重做派生以驗證密碼
沒有“用戶在PIN中打孔”部分,我沒有找到很多這個問題的好答案。 但是,如果您必須使用APP存儲一個,請不要使用密鑰。 至少,使用安全密碼生成器和/或類似PBKDF2(基於密碼的派生函數2)的派生函數生成密鑰。
如果我正確閱讀帖子,谷歌確實說過一種方法是在應用程序第一次啟動時生成密鑰,通過MODE_PRIVATE標志將密鑰存儲到許多文件I / O操作中,並將其用作密鑰。 您還可以基於該主密鑰導出其他密鑰,而NIST實際上也會根據這些內容提出建議。
無論是否信任主密鑰方法,我都會留給您。 此密鑰將在root設備上公開。 我也承認我還在研究這個問題
Android上的每個應用程序都在安全的沙箱環境中運行,因此如果沒有正確的握手,系統上的其他進程將無法訪問您的代碼或私有數據。 但是,由於應用程序設計不佳,仍然存在許多漏洞。 來自Android開發者網站的鏈接建議您提供一些安全性方面的好建議 - https://developer.android.com/training/articles/security-tips.html
如果您想要確保用戶除了查看您的應用程序之外無法查看數據,那么加密確實是唯一的方法。 如果設備已植根,則用戶甚至可以訪問“受保護”存儲。 即使加密也不是完全安全的,因為您需要在某個時刻解密數據才能顯示它。 你會勸阻休閑瀏覽器,但不會勸阻黑客。
在HTTPS上使用SSL來傳輸數據而不是HTTP,您需要在Web服務器上設置證書,而不是非常確定它是如何工作的。
如果您真的關心數據,那么在發送數據之前,請使用獨特的算法對其進行進一步加密,然后在到達應用程序時對其進行解密。 我想這就是它的全部......除非你需要一些非常強大的東西,然后根據TCP和/或使用另一個端口開發自己的協議..也許這會有所幫助
http://en.wikipedia.org/wiki/Secure_Sockets_Layer http://developer.android.com/reference/javax/net/ssl/package-summary.html http://blog.synyx.de/2010/06/機器人和自簽署的SSL-證書/
至於在應用程序中存儲數據,您可以在存儲之前加密數據,或者您可以使用除SQLite之外的其他格式以提高安全性,因為您可以非常輕松地使用瀏覽器查看sqlite數據庫。
除非電話根植,否則不應該從中提取數據。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.