【发布时间】:2017-01-25 07:27:38
【问题描述】:
在我的应用程序中,用户使用网络服务登录,网络服务返回一个授权密钥。在那之后,用户提出的每个请求都使用此密钥完成。
我的问题是如何安全地存储这个密钥?我一直将它存储在 SharedPreferences 中,但这对我来说听起来不是很安全。
【问题讨论】:
在我的应用程序中,用户使用网络服务登录,网络服务返回一个授权密钥。在那之后,用户提出的每个请求都使用此密钥完成。
我的问题是如何安全地存储这个密钥?我一直将它存储在 SharedPreferences 中,但这对我来说听起来不是很安全。
【问题讨论】:
您是对的,使用共享偏好不是要遵循的方法。您应该将Android Keystore System 用于任何此类目的,这是首选方法。
Android Keystore 系统可让您将加密密钥存储在容器中,以便更难以从设备中提取。一旦密钥在密钥库中,它们就可以用于加密操作,而密钥材料仍然不可导出。
KeyStoreUsage.java 是同样的例子。
【讨论】:
以明文形式存储
使用明文意味着假设黑客可以物理访问手机,则无法保护用户的运行时数据。
使用对称密钥加密存储
开发人员是一群乐于助人的人,他们经常将加密密钥放在容易找到的地方,例如 com.packagename.android.util.security。 使用
Android Keystore 系统可让您将加密密钥存储在容器中,从而更难从设备中提取。
使用非对称密钥加密存储
更安全的非对称加密选项是远程存储私钥。
更多详情请参考this article
【讨论】: