在应用程序代码中存储 API 密钥、数据库加密密钥等的最佳位置是什么,这样任何人都无法通过反编译代码来获取它?我使用 proguard 来混淆代码,但它不适用于字符串。
问问题
2393 次
1 回答
4
无法将它们存储在应用程序中。可以在修改后的设备上反编译或执行应用程序,从而提供对应用程序内存的更多访问权限,或者攻击者可以修改应用程序以添加额外的网络或存储/数据库流量等日志记录。
为了向服务器进行身份验证,您的应用程序可能应该通过交换用户输入的凭据以获得此类身份验证令牌或通过从 AccountManager 或类似 API 获取这些身份验证令牌来获取身份验证令牌(或类似的)。您还可以使用 SafetyNet Attest API ( https://developer.android.com/training/safetynet/index.html ) 向您的服务器证明它是您的应用程序使用发出请求的签名密钥签名的。
对于数据库加密,应用程序可以在设备上生成一个随机加密密钥,或者链接到用户输入的凭据或存储在 Android Keystore 中,或者仅仅依赖 Android 为应用程序提供的保护。这取决于您的威胁模型(即,为什么您认为需要加密数据库?)
于 2016-04-10T17:15:18.680 回答