在Android应用中存储密钥的最佳位置是什么?

时间:2016-04-10 17:03:24

标签: android android-security

在应用程序代码中存储API密钥,数据库加密密钥等的最佳位置是什么,以便没有人可以通过反编译来获取它?我使用proguard来混淆代码,但它并没有在字符串上工作。

1 个答案:

答案 0 :(得分:2)

无法将它们存储在应用中。该应用程序可以在修改后的设备上进行反编译或执行,该设备可以提供对应用程序内存的更多访问权限,或者攻击者可以修改应用程序以添加额外的网络或存储/数据库流量记录等。

对于对服务器进行身份验证,您的应用程序可能应该通过为此类身份验证令牌交换用户输入的凭据或通过从AccountManager或类似API获取这些身份验证令牌来获取身份验证令牌(或类似)。您还可以使用SafetyNet Attest API(https://developer.android.com/training/safetynet/index.html)向您的服务器证明您的应用是使用您的签名密钥签署的。

对于数据库加密,应用程序可以在设备上生成随机加密密钥,链接到用户输入的凭据或存储在Android密钥库中,或者仅依靠Android提供给应用程序的保护。这取决于您的威胁模型(即,您认为为什么需要加密数据库?)