什麼是在應用程序代碼中存儲API密鑰,數據庫加密密鑰等的最佳位置,以便任何人都無法通過反編譯代碼來獲取它?我使用proguard來混淆代碼,但它在字符串上不起作用。在Android應用程序中存儲密鑰的最佳位置是什麼?
回答
沒有辦法將它們存儲在應用程序。該應用程序可以反編譯或執行修改後的設備,提供更多的訪問應用程序的內存,或應用程序可以修改攻擊者添加額外的網絡或存儲/數據庫通信記錄等。
對於身份驗證服務器,您的應用程序應該可能通過交換用戶輸入的憑證來獲取授權令牌(或類似),或通過從AccountManager或類似的API獲取這些授權令牌來獲得授權令牌。您也可以使用SafetyNet Attest API(https://developer.android.com/training/safetynet/index.html)向您的服務器證明它是您的應用程序,並使用您的簽名密鑰進行請求。
對於數據庫加密,應用程序可以生成設備上的隨機加密密鑰,或者鏈接到用戶輸入憑證或存儲在Android的密鑰庫,或者單純依靠由Android提供給應用程序的保護。這取決於你的威脅模型(即,爲什麼你認爲你需要加密的數據庫?)
這是如何防止流氓應用程序在與服務器通話時模擬您的應用程序? – pete
您的服務器可能要求所有請求(或登錄請求或類似)都包含SafetyNet認證令牌/斷言。然後,服務器將驗證(1)認證令牌/斷言確實是由Google的SafetyNet Attest基礎架構發佈的;(2)從令牌/斷言中提取程序包名稱+應用程序的簽名證書,並檢查它們是否與您的應用程序匹配。從本質上講,您的服務器將相信很難誤導SafetyNet Attest基礎設施(客戶端和服務器端)。 –
- 1. 什麼是存儲AES加密密鑰的最佳方式?
- 2. 什麼是存儲加密密鑰的最佳方式?
- 3. 在android中存儲密鑰的位置?
- 4. 在MySQL中使用/存儲加密密鑰的最佳方法是什麼
- 5. 什麼是跨應用程序存儲數據的最佳位置
- 6. 什麼是存儲API密鑰和加密密鑰的最佳方式?
- 7. 在Android中存儲應用程序數據的最佳方式是什麼?
- 8. 存儲應用程序信息的最佳方法是什麼?
- 9. 保存加密/解密密鑰的最佳方法是什麼?
- 10. 存儲.NET應用程序配置設置的最佳實踐是什麼?
- 11. 在地理位置應用中存儲路徑的最佳做法是什麼?
- 12. 爲什麼在應用程序之外存儲API密鑰?
- 13. 在Rails應用程序中存儲Configtron配置的權利/最佳位置是什麼?
- 14. 什麼用於加密密鑰和存儲位置?
- 15. 存儲Web應用程序試用數據的最佳位置
- 16. 存儲Xamarin應用程序用戶設置的最佳方法是什麼?
- 17. 爲.NET應用程序存儲用戶設置的最佳方式是什麼?
- 18. 什麼是存儲MySQL數據庫的Android應用程序的最佳方式
- 19. 什麼是存儲Android應用程序的付費內容的最佳方式?
- 20. 將全局應用程序設置存儲在Rails應用程序中的最佳方式是什麼?
- 21. 部署Meteor應用程序時,保護密鑰的最佳方式是什麼?
- 22. 在Android應用程序中存儲用戶名和密碼的最佳選擇
- 23. 在應用程序腳本中存儲陣列的最佳方法是什麼
- 24. 在asp.net應用程序中存儲SMTP憑據的最佳做法是什麼?
- 25. 在Web應用程序中存儲菜單項的最佳方法是什麼?
- 26. 在ios中存儲應用程序數據的最佳地點是什麼?
- 27. 在Silverlight應用程序中存儲ADO.NET數據服務URL的最佳位置是什麼?
- 28. 在Rails 4應用程序中顯示位置的最佳方式是什麼?
- 29. 在ASP.NET MVC Web應用程序項目中,HtmlHelpers的最佳位置是什麼?
- 30. 存儲密鑰的最佳做法
這個問題是[問已經(http://stackoverflow.com/questions/14570989/best-practice-for-storing - 私人-API的鍵合機器人)的[最佳實踐中的Android存儲私有API鍵] – Dmitriy
可能的複製(https://stackoverflow.com/questions/14570989/best-practice-for-storing-private-api -keys-in-android) – Suhaib